一番簡単な 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 と一緒にイン […]
動作中のプロセスのダンプファイルを取得する方法 3 つ
動作中のプロセスのダンプファイルを取得する方法、具体的には次の方法について説明します。 タスクマネージャーを使う(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 […]
いまはもう動かないキーロガーの記録
その昔秋葉原で買ったものの動かなくなってしまったハードウェアキーロガーについて、廃棄する前に写真や使い方などを記録しておきます。 動作確認環境 Windows 11 Home 22H2 ハードウェアキーロガーの動作 ハードウェアキーロガーとは、外付けキーボードとパソコンの間に接続するキー入力記録装置です。下の写真は 2011 年に秋葉原で購入したものです。いまは秋葉原でキーロガーを入手することはできないと思いますが、そのときはレジの上だったか横だったかのパネルに普通にぶら下がっていました。 価格 […]
ソフトウェアブレークポイントとハードウェアブレークポイントの違い
ソフトウェアブレークポイントとハードウェアブレークポイント(プロセッサーブレークポイント, データブレークポイント)の違いを、Visual C++ や WinDbg を使いながら見てみます。 動作確認環境 Windows 11 Home 22H2 Visual Studio Community 2022 (Visual C++) WinDbg 10.0 ソフトウェアブレークポイントとは ソフトウェアブレークポイントは、プログラムのコード(マシン語)を一時的にデバッグ用のトラップ命令に書き換えるこ […]
WinDbg: 関数呼び出しの IN と OUT をトレースする方法
WinDbg で、特定の関数が呼び出されたこと、また、そこからリターンしたことをトレースする方法について説明します。故障解析などで Win32 API 関数や内部関数の呼び出し状況を把握したい場合に役立ちます。 動作確認環境 Windows 11 Home 22H2 Visual Studio Community 2022 (Visual C++) WinDbg 10.0 結論 いきなり結論ですが、次のようなブレークポイントを仕掛けることで目的が達成できます。 ここで、 <モジュール名&g […]
静的リンク・動的リンク・明示的リンク・暗黙的リンク・遅延ロードの違い
混乱しがちな、静的リンク・動的リンク・明示的リンク・暗黙的リンク・遅延ロードの違いについて見てみます。Windows 前提です。 動作確認環境 Windows 11 Home 22H2 Visual Studio Community 2022 (Visual C++) 静的リンクと動的リンク 静的リンク (= スタティックリンク)では、プログラムのビルド時に、ライブラリを実行可能ファイル内に埋め込みます(DLL への埋め込みも可)。静的リンク用のライブラリを、静的ライブラリ(= スタティックライ […]