在C++中向x86 ASM传递整数



我正在尝试用C++进行一些脚本挂钩,并为这种情况设置了一个简单的测试函数。

void __declspec(naked) testFunct()
{
int myInt;
myInt = 2000;
__asm{
mov eax, myInt
jmp [jmp_back_address]
}
}

当使用它传递整数时,函数在被调用时失败,项目崩溃。然而,当使用它时,如果没有整数值,它就会成功通过。

void __declspec(naked) testFunct()
{
__asm{
mov eax, 2000
jmp [jmp_back_address]
}
} 

如何成功传递整数?

对于我的情况,正确的解决方案是简单地通过ASM在ourFunct((中执行所有操作,因为混合C++和ASM来传递变量会创建有缺陷的汇编代码。函数调用有效的示例:

int CalculateTotalScore()
{
return (int)*Game::current_speed_score;
}
DWORD jmpBackAddress;
void __declspec(naked) ourFunct()
{
__asm{
call CalculateTotalScore
jmp [jmpBackAddress]
}
}

汇编程序不知道什么"myInt";方法大多数编译器都支持具有传递值可能性的内联汇编。例如,使用GCC,您可以尝试定义一个类似的宏

#define MY_ASM_MACRO(myInt) ({ asm volatile("mov eax,%0nt 
jmp [jmp_back_address]" : : "r"(myInt) : ); })

像一样使用

void __declspec(naked) testFunct()
{
int myInt;
myInt = 2000;
MY_ASM_MACRO(myInt)
}

最新更新