如何在x64 Visual C++中执行裸函数和内联汇编程序

How to do a naked function and inline assembler in x64 Visual C++

本文关键字:函数 汇编程序 执行 x64 Visual C++      更新时间:2023-10-16

我正在使用裸函数和内联汇编程序代理中的方法调用。

__declspec(naked) void ProxyFunction()
{
    static const unsigned int addressofRealFunction = 0x0041b200;
    __asm
    {
        jmp [addressofRealFunction];
    }
}

如何将其翻译为x64?在visual studio中,没有x64的内联汇编程序或裸函数。

Naked删除了程序集的序言和尾声。我需要这样来确保堆栈帧对于调用保持等效。

你会怎么做?

如果Microsoft建议您对此类任务使用masm不起作用,那么一种方法是考虑分配页面,在页面上设置可执行属性,然后使用直接内存写入将操作码放置在页面开头的偏移位置。

尝试直接编译:

void ProxyFunction()
{
    RealFunction();
}

看看编译器是否将其优化到裸跳。可能吧。