Microsoft Learn の機械翻訳で意味が反対になっている例 2 つ

Microsoft Learn (旧 Microsoft Docs, MSDN)のサイトの技術解説は、機械翻訳のせいで意味が反対になっていることがあるので注意が必要です。 リンカーのオプションの説明が逆 たとえば以下は、リンカーのオプション「/BASE」についての説明ページです。 「セキュリティ上の理由から、実行可能ファイルのベース アドレスを /DYNAMICBASE 指定する代わりに、このオプションを使用することをお勧めします。」とあります。日本語として少し不自然ですが、/DYNAMICBA […]

Windows エラー報告の .wer ファイルの読み方

アプリケーションの異常終了時に Windows エラー報告 (Windows Error Reporting; WER) が生成する「Report.wer」ファイルの読み方について簡単に説明します。生成される場所は「%ProgramData%\Microsoft\Windows\WER\ReportArchive」フォルダ内で、中身は単なるテキストファイルです。 動作確認環境 Windows 11 Home 23H2 Visual Studio Community 2022 EventType […]

ビット 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 […]

一番簡単な x64 アセンブリ言語プログラム (Windows, MASM)

固定値を返すだけの一番簡単な x64 アセンブリ言語プログラムを書いて、アセンブル・リンク・実行してみます。利用するアセンブラは Visual Studio に付属の 64bit 版 MASM(マイクロソフトマクロアセンブラ)です。 動作確認環境 Windows 11 Home 22H2 Visual Studio Community 2022 (MASM for x64) 6 行のアセンブリ言語プログラム 固定値 100 を返すだけの 6 行のシンプルなアセンブリ言語プログラムです。 「.co […]

最近知った Windows コマンドのオプション, 「sort /unique」ほか

Windows のコマンドプロンプトで使えるコマンドから、最近知って便利だなと思ったオプションを紹介します。 動作確認環境 Windows 11 Home 22H2 sort /unique /case MS-DOS の時代からある sort コマンド。文字列を行単位で並び替える(ソートする)コマンドですが、いつの間にか /unique オプションが追加され、重複文字列の削除ができるようになっていました。 たとえば次のファイルに対して、 単に sort すると ABC 順に並び変わるだけですが、 […]

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

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

動作中のプロセスのダンプファイルを取得する方法

動作中のプロセスのダンプファイルを取得する方法、具体的には次の方法について説明します。 タスクマネージャーを使う(GUI) ProcDump を使う(コマンドライン) 自作プログラムを使う 例外発生時に自動的にダンプファイルを取得する方法ではありません。また、カーネルダンプではなくユーザーダンプの話です。 動作確認環境 Windows 11 Home 22H2 Visual Studio Community 2022 (Visual C++) ProcDump v11.0 タスクマネージャーを使 […]

アプリケーションが例外をキャッチしなかったらどうなるか

アプリケーション内で発生した Null Pointer Exception などの例外をアプリケーション自身が捕捉(キャッチ)しなかった場合、デバッガが起動したりダンプファイルが生成されたりしますが、この動作がどうなっているのか追ってみます。 動作確認環境 Windows 11 Home 22H2 Visual Studio Community 2022 (Visual C++) 例外発生プログラムを作成 調査のため、3 秒後に NULL ポインタ例外(Null Pointer Exceptio […]

WinDbg: ダンプファイルの解析をしたいがオフライン環境のためシンボルファイルがダウンロードできないとき

ダンプファイル(メモリダンプ, .dmp ファイル)を解析したいがデバッグ環境がインターネットから切り離されているため OS のシンボルファイル(デバッグ情報ファイル, プログラムデータベース、.PDB ファイル)がダウンロードできない場合、どこか別のオンライン環境にて適切なシンボルファイルをダウンロードして持ってくる必要があります。その方法についていくつか説明します。 動作確認環境 Windows 11 Home 22H2 WinDbg 10.0 ダンプファイルを別環境に持っていき WinDb […]