[英]Passing array as a parameter to an external ASM (Assembly) x86 and accessing it
[英]Passing integer to x86 ASM in C++
我正在尝试在 C++ 中进行一些脚本挂钩,并为此案例设置了一个简单的测试 function。
void __declspec(naked) testFunct()
{
int myInt;
myInt = 2000;
__asm{
mov eax, myInt
jmp [jmp_back_address]
}
}
当使用它传入 integer 时,function 在被调用时失败并且项目崩溃。 但是,当改用它时,没有 integer 值,它成功通过。
void __declspec(naked) testFunct()
{
__asm{
mov eax, 2000
jmp [jmp_back_address]
}
}
怎样才能顺利通过integer?
汇编器不知道“myInt”是什么意思。 大多数编译器都支持内联汇编,并可以传递值。 例如,对于 GCC,您可以尝试定义一个宏
#define MY_ASM_MACRO(myInt) ({ asm volatile("mov eax,%0\n\t \
jmp [jmp_back_address]" : : "r"(myInt) : ); })
并像使用它一样
void __declspec(naked) testFunct()
{
int myInt;
myInt = 2000;
MY_ASM_MACRO(myInt)
}
针对我的情况,正确的解决方案是通过 ASM 简单地在 ourFunct() 中执行所有操作,因为将 C++ 和 ASM 混合用于传递变量会产生错误的汇编代码。 有效的 function 调用示例:
int CalculateTotalScore()
{
return (int)*Game::current_speed_score;
}
DWORD jmpBackAddress;
void __declspec(naked) ourFunct()
{
__asm{
call CalculateTotalScore
jmp [jmpBackAddress]
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.