gpt4 book ai didi

c++ - 如何以编程方式模拟在 64 位窗口中调用的 DllMain?

转载 作者:太空狗 更新时间:2023-10-29 21:24:10 28 4
gpt4 key购买 nike

我还不习惯这整个 64 位的东西,因为我熟悉堆栈中的所有内容。例如,如果我想在 Windows 32 上的程序集中模拟 DllMain,我会这样做:

__declspec(naked) void DllCall_Stub(HMODULE hModule)
{
_asm
{
push 0;
push 1;
push [esp + 0Ch]
mov eax, 0x12345678;
call eax;
ret;
}
} __declspec(naked) void DllCallStubEnd(void){}

但是,在 Windows 64 上,它显然通过寄存器传递参数。

在 64 位进程上执行此操作的等效项是什么?

最佳答案

在使用 MSVC 构建时,您需要在 x64 中将汇编代码与 C 代码分开。因为它不再允许内联汇编。在 Windows x64 中,RCX 是第一个参数,RDX 是第二个参数,R8R9 是第三个和第四个参数,剩下的通过堆栈传递。并且您需要为您传递的所有参数分配堆栈,即使是通过寄存器传递的前四个参数。参见 http://msdn.microsoft.com/en-us/library/ms235286(v=vs.110).aspx了解更多信息。

关于c++ - 如何以编程方式模拟在 64 位窗口中调用的 DllMain?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16805358/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com