タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

x86とasmに関するkaorunのブックマーク (2)

  • Assembler/なぜx86ではMBRが"0x7C00"にロードされるのか?(完全版) - Glamenv-Septzen.net

    どの世代でも、当時のマシンに搭載されていた標準的な物理メモリを越えた場所を指している。 これは割り込みベクタの影響でアドレス0を使えない為と、最初の命令フェッチから始まる初期化プログラムをなるべくアドレスの高位に配置することで、一般的なプログラムの使えるアドレス空間を邪魔しないようにとの意図らしい。 BIOSが格納されたROMは、電子回路のレベルでこれら高位アドレスにマッピングされるよう調整されている。 IBM PC 5150 ではROM BIOSがFE000以降にロードされるようになっており、丁度 FFFF0H に、BIOSコードの先頭へJMPする機械語コードが配置されている。(後述) ※1 : 80286は24bitのアドレスバスを持つが、リアルモードでは20bitしか使われない。A20-A23はリセット後は1になっている。そのため、CSこそ"F000H"になっているが、もう4bit

    kaorun
    kaorun 2010/09/22
  • x86命令のバイトコードを理解する - やや温め納豆

    ある命令をバイト表現でハンドアセンブルしたいとき、Intelのオペコード表の見方を理解していないと非常に苦労する。しかし、Intelのマニュアルはとっつきづらい*1ところがあり、理解するのに時間がかかるので、ヒントとしてまとめていく。ちなみに、小数点系やx64については扱わない。 用意するもの Intel命令セット リファレンス OllyDbg(ハンドアセンブルして確認するため。実際は何でもよい) OllyDbgで適当なバイナリを開いて、命令行を右クリックして表示されるメニューでバイナリを編集できる。 [Assemble...]はアセンブラで記述することができる [Edit] > [Binary edit...]はバイトコードで記述することができる オペコードの表記 バイナリアンが最も好む命令はINT 3、NOP、JMPであることは疑いようがないので、ここではJMPを例にとる。JMPのオペ

    x86命令のバイトコードを理解する - やや温め納豆
    kaorun
    kaorun 2009/09/22
  • 1