Intel.com サーチを使用 いくつかの方法で Intel.com のサイト全体を簡単に検索できます。 製品名: Core i9 文書番号: 123456 Code Name: Emerald Rapids 特別な演算子: “Ice Lake”, Ice AND Lake, Ice OR Lake, Ice*
x86-64 命令の概要 一般のプログラムで使用する整数用の命令を解説します。浮動小数点を扱うFPU や SSE2 の命令は(当面)扱いません。 64ビットモードで使用可能な命令に限定しています。命令の前においてパラメータのサイズを指定するプリフィックスは デフォルトアドレスサイズは64ビット、デフォルトオペランドサイズは32ビットの場合に使用するものとなります。 データ転送命令 レジスタ間、レジスタ・メモリ間でデータをコピーする命令をデータ転送命令といいます。 プログラム中で最もよく使われる命令です。 データ転送命令は単にコピーを行う MOVe とデータのサイズを拡張するCBW、CWD、 データサイズを拡張して転送する MOVESX (MOVe Sign eXtend)、 MOVEZX (MOVe Zero eXtend)があります。 フラグレジスタの内容(条件)ににしたがって転送をする
凄く場違いな話題だが、x64 Windows 向けのツールチェーンに加えられた飛躍的な進化について。x64 Windows 向けの例外処理もだいたい分かるぐらいに話す。 (カーネル/VM Advent Calendar : 1010+1001/01/11 分) x86→x64 Windows はこのプラットフォームの変化によって、様々な部分が変化した。そして、色々な部分が進化した。例外ハンドリングもそのひとつだ。その代わり、コンパイラがマトモなモノでないとこの恩恵を得ることができない。x86 用の Windows がターゲットならばかなり腐ったコンパイラでも一丁前の実行ファイルを得られたが、x64 ではそうはいかない。具体的には次の部分がある。 x64 用標準 ABI の整備 レジスタ渡しになったのはかなりのプラスだが、関数のプロローグとエピローグの形は大きく制約されることになった。x86
どの世代でも、当時のマシンに搭載されていた標準的な物理メモリを越えた場所を指している。 これは割り込みベクタの影響でアドレス0を使えない為と、最初の命令フェッチから始まる初期化プログラムをなるべくアドレスの高位に配置することで、一般的なプログラムの使えるアドレス空間を邪魔しないようにとの意図らしい。 BIOSが格納されたROMは、電子回路のレベルでこれら高位アドレスにマッピングされるよう調整されている。 IBM PC 5150 ではROM BIOSがFE000以降にロードされるようになっており、丁度 FFFF0H に、BIOSコードの先頭へJMPする機械語コードが配置されている。(後述) ※1 : 80286は24bitのアドレスバスを持つが、リアルモードでは20bitしか使われない。A20-A23はリセット後は1になっている。そのため、CSこそ"F000H"になっているが、もう4bit分
各逆アセンブラライブラリの詳細については、各ライブラリのサイトを参照。ここではどのライブラリを使うかだが、ここでは上記の1つであるHacker Disassembler Engine(HDE)を使うことにした。理由は最終更新日が最近(2009年3月)であるのと、軽量である点だ。他のライブラリは結構高機能で逆アセンブルした機械語をアセンブラのニーモニックのテキスト形式に変換できたりするが、今回はx86命令のRET命令を検出できればよいので、命令長やオプコードなど最小限の情報だけを取得できるHDEにした(ちなみに、上記BeaEngineのサイトにLength Disassemblerというものもあるようだ・・)。 次に、新しいクラスを設計するが、その前にx86命令の大まかな命令フォーマットを知らないと設計できないので、x86命令の命令フォーマットを少し。x86命令の命令フォーマットは次のように
アナゴルファーという卑猥げな表記を見るたびに不穏な空気を感じざるを得ない今日この頃,皆様いかがお過ごしでしょうか ? anarchy golf バイナリ (機械語) ゴルフを行う際,アセンブリ命令列の長さや代替案を知りたい,という場面はよくあることかと思います. ふとしたことから,gcc に -dp なんていうオプションがあることを知りました. Using the GNU Compiler Collection (GCC) 3.9 Options for Debugging Your Program or GCC -dp Annotate the assembler output with a comment indicating which pattern and alternative was used. The length of each instruction is also p
ある命令をバイト表現でハンドアセンブルしたいとき、Intelのオペコード表の見方を理解していないと非常に苦労する。しかし、Intelのマニュアルはとっつきづらい*1ところがあり、理解するのに時間がかかるので、ヒントとしてまとめていく。ちなみに、小数点系やx64については扱わない。 用意するもの Intel命令セット リファレンス OllyDbg(ハンドアセンブルして確認するため。実際は何でもよい) OllyDbgで適当なバイナリを開いて、命令行を右クリックして表示されるメニューでバイナリを編集できる。 [Assemble...]はアセンブラで記述することができる [Edit] > [Binary edit...]はバイトコードで記述することができる オペコードの表記 バイナリアンが最も好む命令はINT 3、NOP、JMPであることは疑いようがないので、ここではJMPを例にとる。JMPのオペ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く