如何从汇编中调用C ++函数?

时间:2015-01-31 05:32:43

标签: c++ assembly

我正在编写一个需要一些自定义汇编代码的C ++程序。

我像这样编写汇编代码

__asm
{
    //Code Here
}

我希望能够在程序集中调用C ++函数,就像调用

一样
MyFunction(eax, ebp).

2 个答案:

答案 0 :(得分:0)

不确定您正在谈论的指令集。但只要指令集支持它,你就可以 1.在代码中声明并初始化函数指针 2.使用调用或跳转类型的指令从函数指针

指向的存储器地址执行

答案 1 :(得分:0)

如果您遵守调用约定,则可以调用函数。这是Visual Studio 2010(32位)的示例:

#include <iostream>

char* txt = "Hello world";

int myfunc2 (char* s)
{
    std::cout << s << std::endl;
    return 0;
}

int myfunc1 ()
{
    char* s = new char[80];

    __asm
    {
        mov ebx, s                      ; = mov ebx, [ebp -4]
        mov byte ptr [ebx], 'H'
        mov byte ptr [ebx+1], 'e'
        mov byte ptr [ebx+2], 'l'
        mov byte ptr [ebx+3], 'l'
        mov byte ptr [ebx+4], 'o'
        mov byte ptr [ebx+5], 0         ; Don't forget the terminator!

        push s
        call myfunc2                    ; Call the function above
        add esp, 4

        push txt
        push s
        call strcpy                     ; Function of C-library
        add esp, 8

        push s
        call puts                       ; Function of C-library
        add esp, 4

    }

    delete[] s;
    return 0;
}

int main()
{
    myfunc1();
    return 0;
}