これをC++関数でインライン展開するにはどうすればよいでしょうか。C++の自己修正アセンブリコードのインライン展開方法
0041F84E . 7B 02 JPO SHORT Unmodifi.0041F852
0041F850 B8 DB B8
0041F851 00 DB 00
0041F852 . 8B46 38 MOV EAX,DWORD PTR DS:[ESI+38]
0041F855 . 8B56 24 MOV EDX,DWORD PTR DS:[ESI+24]
0041F858 . 8B4E 10 MOV ECX,DWORD PTR DS:[ESI+10]
0041F85B . 81EA 8B4B8636 SUB EDX,36864B8B
にはどうすれば DB B8
DB 00
void test() {
__asm {
...
JPO label_0041F852
__emit 0xB8
__emit 00
label_0041F852:
MOV EAX,DWORD PTR DS:[ESI+0x38]
MOV EDX,DWORD PTR DS:[ESI+0x24]
MOV ECX,DWORD PTR DS:[ESI+0x10]
SUB EDX,0x36864B8B
...
}
}
エラーC2400置く: 'オペコード' のインラインアセンブラ構文エラー。 'constant'が見つかりました cl.exeの実行中にエラーが発生しました。
私はこれを.data
セクションに入れることはできないと思いますが、このようなバイトを含めることができます。
最近のシステムでは、一般に、書き込み可能で実行可能なプログラムセグメントは禁止されています(http://en.wikipedia.org/wiki/NX_bit#Microsoft_Windows)。 – sarnold
外部から実行時に 'DB 00'バイトを変更しようとしていますか?このスニペットで何かを変更するコードはありません。 – TonyK
um 'JPO'命令は、ジャンプが行われない場合のコード修飾子です。 – SSpoke