Windows 1.0 日本語版 パッケージの写真 (NEC PC-9800シリーズ)

Windows 1.0 日本語版のパッケージ(箱)や中身の写真がインターネット上にほとんど見当たらないので載せておきます。 パッケージ Windows 1.0 のパッケージの写真です。NEC の PC-9801 用に売り出されたものです。 パッケージの裏です。NEC のロゴの上に「たしかな技術で世界をむすぶ」というキャッチコピーがあります。 ディスク フロッピーディスクの入っているプラスチックのケースです。 ケースを開けると 3.5 インチフロッピーディスクが 4 枚入っています。ラベルにはそれ […]

WinDbg のカーネルデバッグで使える USB 3.0 ケーブルを秋葉原で買った部品で作る

WinDbg のカーネルデバッグで使える USB 3.0 ケーブルを買おうと思ったのですが高すぎたので自作した話です。2 台の PC を直接接続する、両端が USB Type-A オス端子のデバッグ用クロスケーブルです。 Web でデバッグケーブルを探したものの 最初に Web で USB 3.0 デバッグケーブルを探したのですが、ニーズが少ないのか、日本のサイトでは売っていないようでした。 仕方がないので、米国 DataPro 社のサイト [1] からの購入を試みます。 「3ft $14.95 […]

Visual C++ での同一ソース同一バイナリの実現方法を探る

Visual C++ で C/C++ のプログラムをコンパイル(ビルド)すると、ビルドのたびに微妙に異なるバイナリが生成されてしまいます。そのため、バイナリからソースを特定するのが面倒です。この問題を回避する方法を探ります。 動作確認環境 Windows 11 Home 21H2 Visual Studio Community 2019 課題 1. ビルド日時が埋め込まれる Visual C++ はバイナリにビルド日時を埋め込みます。次のプログラムで確認してみましょう。 ビルドします。 生成され […]

DLL_PROCESS_ATTACH やコンストラクタの実行タイミングを調査する

次の処理の実行タイミングを調査します。 EXE のロード DLL のロード DLL_PROCESS_ATTACH DLL_PROCESS_DETACH グローバル変数のコンストラクタ グローバル変数のデストラクタ メインルーチン mainCRTStartup _DllMainCRTStartup 動作確認環境 Windows 11 Home 21H2 Visual Studio Community 2019 結論 結論から書きます。 下図の青丸が起動時の処理順になります。 下図の赤丸が終了時の処 […]

api-ms-win-crt-runtime-l1-1-0.dll といった長い名前の DLL の実体は何か

「api-ms-win-crt-runtime-l1-1-0.dll」だとか「api-ms-win-crt-stdio-l1-1-0.dll」だとか、やたら長い名前の DLL が実行可能ファイルにリンクされていることがありますが、これは何なのでしょうか。 動作確認環境 Windows 11 Home 21H2 Visual Studio Community 2019 やたら長い名前の DLL メモ帳がリンクしている DLL を見てみます。 「api-ms-」から始まる長い名前の DLL がたくさ […]

Windows システムファイルのビルド日時が表示されない謎を探る

EXE ファイルや DLL ファイルにはビルド日時が埋め込まれており、dumpbin コマンドで表示できます。しかし、Windows のシステムファイルの多くは、ビルド日時が表示されません。OS のファイルなので特別扱いされているのでしょうか。調査します。 動作確認環境 Windows 11 Home 21H2 Visual Studio Community 2019 WORD のビルド日時を確認する 実行可能ファイル(ここでは EXE, DLL, SYS などを含む)のビルド日時は、Visua […]

何もしない長い命令、マルチバイト NOP (x86/x64)

x86/x64 CPU には、何もしないマシン語「90」(16進数)が存在します。アセンブリ言語でいうと「NOP」です。 では 2 バイト以上を何もしない命令でふさぎたい場合は「90」を繰り返せばいいのかというと、それでも構いませんが、 2 バイトの何もしないマシン語「66 90」 3 バイトの何もしないマシン語「0F 1F 00」 4 バイトの何もしないマシン語「0F 1F 40 00」 …… といった専用の命令が存在します。 こうした何もしない長い命令「マルチバイト NOP」について調べてみ […]

Windows プロセスの親子関係を見る

Windows プロセスの親子関係について調べます。 動作確認環境 Windows 11 Home 21H2 プロセスツリーを見る Windows では、あるプロセスから別のプロセスを生成すると、親子の関係になります。親子関係は Sysinternals のプロセスエクスプローラー (ProcExp.exe) で確認できます。 Windows のシェルである「エクスプローラー (explorer.exe)」から「Excel (excel.exe)」と「コマンドプロンプト (cmd.exe)」を起 […]

安全と言われる Rust はどのように配列の長さをチェックしているのか

Rust 言語では配列・バッファの長さチェックを行っており、既定のサイズを超えて使おうとすると実行時エラー(バッファオーバーラン)になるとのこと。配列を使う直前に毎回範囲チェックをしているのでしょうか。Rust を使うのは初めてですが、動作を確認してみます。 動作確認環境 Windows 11 Home 21H2 Rust 1.58.1 WinDbg 配列を使うプログラムを作る 配列を使う Rust のプログラムを書きます。 4 つの要素をもつ配列(buf[0] から buf[3] までが有効) […]

dumpbin /headers が想定外の値を返した話

「dumpbin /headers ファイル名」が想定外のビット数を報告してきて戸惑った話です。 動作確認環境 Windows 11 Home 21H2 Visual Studio Community 2019 System32 と SysWOW64 64bit 版 Windows では、64bit 版のシステムファイルが「C:\Windows\System32」内に、32bit 版のシステムファイルが 「C:\Windows\SysWOW64」に格納されています。 しかし、各ディレクトリにある […]