我正在学习dll注入这些天。有我的代码:
__declspec(naked) void codecave() {
__asm {
pushad
mov dword ptr ds : [ebx + 4] , 0xD
popad
mov dword ptr ds : [0x102AE98] , ebx
jmp ret_address
}
}
我使用关键字__declspec (naked)
来避免对堆栈的副作用(不打算创建堆栈帧)。但是当我试图将其移植到x64时,情况完全不同。__declspec (naked)
在x64上被禁用。我发现内联汇编在x64上也被禁用。
我发现我可以使用MASM来编写汇编代码。但是__declspec (naked)
的替代方案是什么,以避免在进行dll注入时对堆栈的副作用?
1条答案
按热度按时间qxsslcnc1#
我找到解决方案了!在基于x64的VS 2022中,我们可以安装clang而不是MSVC。然后我们可以使用
_asm
编写内联汇编代码。至于naked
关键字。我发现我们可以使用__fastcall
强制程序使用寄存器传递前2个参数,而不是添加堆栈帧(但只有前2).通过这样做,我们可以避免dll注入的副作用!