わかりましたので、プログラムをフックする必要がありますが、これを行うには命令をコピーしますE8 <Pointer to Byte Array that contains other code>
。これの問題は、アセンブルするCall 0x100
とE8 FD
、E8 が呼び出し命令であることがわかっているため、FD が宛先であることがわかっているため、アセンブラは 0x100 から FD への宛先をどのように取得するのでしょうか? ありがとう、ブラッドリー - インセプト
2 に答える
3
jump/call オペコードは多数あり、そのうちのいくつかは相対的なものです。私はあなたが実際に持っていなかったと思いますE8 FD
がE8 FD FF
. E8
「16ビット相対呼び出し」のよう0x100
で、デフォルトで命令が配置される場所です。
したがってcall 0x100
、アドレス 0x100 に置くと、生成されたコードは「ジャンプ命令を実行し、実際の命令ポインタから -3 ジャンプする」です。これは、命令が読み取られた後-3
の位置からシフトが計算されるためです。これは、 0x103 の場合です。そのため、シフト if 、ビッグエンディアン forは 16 ビットです。E8 FD FF
FD FF
0xfffd
-3
于 2012-01-01T19:08:45.393 に答える
0
http://wwwcsif.cs.ucdavis.edu/~davis/50/8086 Opcodes.htm
E8 は 16 ビットの相対呼び出しです。したがって、たとえばE8 00 10
、PC + 0x1000 のアドレスを呼び出すことを意味します。
于 2012-01-01T19:09:01.540 に答える