ビット 1 をカウントする popcnt やエンディアンを変換する bswap など x64 の高機能なビット操作命令を C 言語から呼び出す (Windows, Visual C++)

x64 CPU には、64 ビットレジスタ内の ビット 1 の個数を数えたり、右端あるいは左端から最初にビット 1 が現れる位置を探したり、指定した位置のビットの値を一か所に集めたりする、高機能なビット操作命令があります。それらの命令を Visual C++ から呼び出してみます。C++ ではなく C 言語を使います。 動作確認環境 Windows 11 Home 23H2 Visual Studio Community 2022 (Visual C++) Intel Core i5-8265U […]

x64 アセンブリ言語で、Windows API や C 言語のライブラリを呼び出す .exe, .lib, .dll を開発する (Windows, MASM)

前回は簡単な x64 アセンブリ言語プログラムを作りました。今回は次のプログラムを作ります。 C 言語のライブラリや Windows の API を呼び出すプログラム (.exe) 足し算をするだけのスタティックライブラリ (.lib) C 言語のライブラリや Windows の API を呼び出すスタティックライブラリ (.lib) 足し算をするだけの DLL (.dll) C 言語のライブラリや Windows の API を呼び出す DLL (.dll) 使用するアセンブラは Visual […]

このヒープメモリはいったい誰が確保したものなのか、を調べる方法(Windows, C 言語)

メモリリークの故障解析などで、「このアドレスのヒープメモリはいったい誰が確保したものなのか」を知りたくなる場合があると思います。そんなときは Windows の設定を変更しておくと、メモリ確保時の呼び出し履歴が自動的に記録されます。 動作確認環境 Windows 11 Home 22H2 Visual Studio Community 2022 (Visual C++) WinDbg 10.0 GFlags (Global Flags) GFlags で設定変更 まず、WinDbg と一緒にイン […]