0

我将如何在 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部分中,我已经阅读了我所能做的所有事情来包含这样的字节。

4

1 回答 1

2

这是回复 SSpoke 的示例请求的答案长度评论。很久以前,当模拟图灵机是一件很酷的事情时,我编写了一个图灵机模拟器程序来搜索DEC Vax 小型机上忙碌的海狸。当程序决定接下来尝试哪台图灵机时,它会将图灵机的机器代码编译成一个数组,并像调用函数一样调用该数组。(所有这些都写在C。)

那是自修改代码。要运行它,您需要一块同时可写和可执行的内存区域。

你的代码不是自我修改的——你根本不写它。因此,您可以在只读程序段中运行它。

于 2011-10-24T15:05:15.513 回答