c ++ visual studio 64位|保存寄存器值

问题描述 投票:-1回答:1

我正在使用弯路来钩挂某些函数,该函数将一些变量保存在寄存器中,以便钩挂到该函数并在钩挂后返回到实际代码(并使其起作用),我需要保存这些寄存器中的值,然后再加载。对于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++ visual-studio assembly masm
1个回答
0
投票

您已经发现需要单独的汇编代码源。如果要保存寄存器,可以将它们保存在汇编源文件或C ++源文件中声明的全局变量中。如果变量在C ++源文件中声明,则它们将需要在C ++文件中公开,并在汇编源文件中声明为“ extrn”。数据保存在部件文件中的示例:

© www.soinside.com 2019 - 2024. All rights reserved.