的规则编译,不进行名字修饰。例如,我们首先需要在C++代码中声明如下。
在汇编代码中声明这个函数即可。
如果不加 extern "C" ,那么我们在汇编代码中声明的标号就不是 functionFromCpp ,而是
functionFromCpp 经过名字修饰后的标号,这将会变得非常麻烦。
在C/C++调用汇编函数之前,我们先需要在汇编函数中将函数声明为 global 。例如我们需要调用
汇编函数 function_from_asm ,那么我们首先需要在汇编函数中声明为 global 。
否则在链接阶段会找不到函数的实现。
然后我们在C/C++中将其声明来自外部即可,如下所示。
在C++中需要声明为 extern "C" ,如下所示。
在很多情况下,我们调用的函数是带有返回值和参数的。在前面的“改造MBR”的内容中,我们提
到了C/C++函数调用规则,这里我们再重温一下,如下所示。
如果函数有参数,那么参数从右向左依次入栈。
如果函数有返回值,返回值放在eax中。
放置于栈的参数一般使用ebp来获取
我们以一个例子来说明。我们有两个函数,一个是汇编函数 function_from_asm ,一个是C函数
functionFromC ,并且两个函数在C代码中声明如下。
extern int function_from_asm(int arg1, int arg2);
int functionFromC(int arg1, int arg2);