何もしない長い命令、マルチバイト 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」に格納されています。 しかし、各ディレクトリにある […]
dumpbin.exe は link.exe の単なるラッパーだった
モジュールの調査でよく使う dumpbin ツールが、リンカーの単なるラッパーだったという話です。 動作確認環境 Windows 11 Home 21H2 Visual Studio Community 2019 便利な dumpbin EXE や DLL の調査に便利な dumpbin ツール。特に次のオプションはよく使います。 /headers : ヘッダー情報を表示 /dependents : 依存 DLL を表示 /exports : エクスポート情報を表示 /imports : インポ […]
exe ファイルの中にある ABCDEFG… は何なのか
exe ファイルやダンプファイルを見ていると、”ABCDEFGHIJKLMN…” といった文字列を目にすることがあります。これは何なのでしょうか。 動作確認環境 Windows 11 Home 21H2 Visual Studio Community 2019 ABCDEFG… の文字列 何の処理もしないプログラム「ctest1.c」を書きます。 Visual C++ でビルドします。 生成された「ctest1.exe」ファイルの中身を見てみます。 プログラムには書いてい […]
ディスクの内容を直接読むと、ほかのユーザーのファイルも見れてしまう件 (Visual C++)
Visual C++ で、ファイルではなく、ディスクそのものを読み込むプログラムを作ってみます。 動作確認環境 Windows 11 Home 21H2 Visual Studio Community 2019 ディスクを読み込むプログラム 「物理ディスク 0」の先頭 512 バイトを読み込むプログラムを以下に示します。ポイントは次の通りです。 CreateFile() のファイル名として、”\\\\.\\PHYSICALDRIVE0″ を指定する。 読み込む場所とサイズ […]
Visual C++ で末尾再帰の最適化を確認する
Visual C++ で末尾再帰の最適化を確認します。 動作確認環境 Windows 10 Home 21H2, 64bit Visual Studio Community 2019 普通の再帰プログラムを書く 1 から 100 までの数を合計するプログラムを、再帰を使って書きます。ループで書くなり計算で求めたりしたほうが効率的ですが、実験のため再帰を使います。 コンパイルして、実行します。Zi は「デバッグ情報生成」の意味です。 1 から 100 までの合計である 5050 が表示されました。 […]
JavaScript の Promise がよく分からないので調べてみた
JavaScript の Promise を使った非同期処理がよく分からないので調べてみました。(低レイヤーの話ではありません。) 動作確認環境 Windows 10 Home 21H2, 64bit Microsoft Edge 97 Promise の動作に対する疑問 Promise の説明でありがちなサンプルプログラムです。 実行すると、「#1」「#2」「#3」「#4」「#5:hello」と表示されます。 最初、次の点が分かりませんでした。 new Promise() の引数内の reso […]
フルパス名で指定したファイルを Copy Here
エクスプローラーで表示している場所に、フルパス名で指定したファイルをコピーする方法です。 動作確認環境 Windows 10 Home 21H2, 64bit コピー手順 このファイルを、 エクスプローラーで表示しているこの場所にコピーしたい。 フルパス名をクリップボードにコピーして、 エクスプローラーのアドレスバーに「cmd /c copy 」と入力後、 [Ctrl]+[V] キーを押してフルパス名を追加し、 [Enter] キーを押すとファイルがコピーされます。 ※ 注1. コピー元としてワ […]