c++ __declspec(naked)的替代方案是什么?

2w3rbyxf  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(266)

我正在学习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注入时对堆栈的副作用?

qxsslcnc

qxsslcnc1#

我找到解决方案了!在基于x64的VS 2022中,我们可以安装clang而不是MSVC。然后我们可以使用_asm编写内联汇编代码。至于naked关键字。我发现我们可以使用__fastcall强制程序使用寄存器传递前2个参数,而不是添加堆栈帧(但只有前2).通过这样做,我们可以避免dll注入的副作用!

相关问题