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

时间:2014-10-29 18:13:32

标签: c++ c visual-studio assembly

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

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

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

Naked删除了集会序幕和结语。我需要这个以确保堆栈帧保持等效于调用。

你会做什么?

2 个答案:

答案 0 :(得分:4)

尝试直接编译:

void ProxyFunction()
{
    RealFunction();
}

查看编译器是否将其优化为裸跳。它可能会。

答案 1 :(得分:1)

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

或者,Google可能会为您提供答案here