我正在使用弯路来钩挂某些函数,该函数将一些变量保存在寄存器中,以便钩挂到该函数并在钩挂后返回到实际代码(并使其起作用),我需要保存这些寄存器中的值,然后再加载。对于32位版本,我只运行了以下代码:
DWORD esireg = 0;
DWORD eaxreg = 0;
__asm
{
mov esireg, esi
mov eaxreg, eax
}
现在我的代码开始运行,完成后我将加载寄存器。
__asm
{
mov esi, esireg
mov eax, eaxreg
}
我的问题是,在64位的视觉环境中,在Google中搜索了一点后就没有内联汇编了,任何人都对如何保存寄存器值以及在写入该值之后有任何想法?
我尝试创建一个外部asm文件,如此视频所示:https://www.youtube.com/watch?v=XqZCkYr1FB8
问题是我需要将寄存器值保存到变量中,所以当我尝试写时:
savereg proc
mov esireg, esi
savereg endp
它说:“未定义的符号esireg”
有什么主意吗?
您已经发现需要单独的汇编代码源。如果要保存寄存器,可以将它们保存在汇编源文件或C ++源文件中声明的全局变量中。如果变量在C ++源文件中声明,则它们将需要在C ++文件中公开,并在汇编源文件中声明为“ extrn”。数据保存在部件文件中的示例: