我如何在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:'操作码'中的内联汇编语法错误;发现'恒定' 执行cl.exe时出错。
我认为我不能把它放在.data
部分,我已经阅读了所有我可以做的事情来包含这样的字节。
答案 0 :(得分:2)
这是回答SSpoke的一个例子请求的答案长度评论。很久以前,当模仿图灵机是一件很酷的事情时,我写了一个图灵机模拟器程序来搜索DEC Vax小型机上的busy beavers。当程序决定接下来尝试哪个图灵机时,它将图灵机的机器代码编译成一个数组,并将该数组称为一个函数。 (所有这些都是用C
写的。)
这是自修改代码。要运行它,您需要一个可以同时写入和执行的内存区域。
您的代码不是自我修改的 - 您根本不会写入代码。因此,您可以在只读程序段中运行它。