【发布时间】:2013-04-21 18:13:29
【问题描述】:
是否可以使用 GCC 从 C 函数生成汇编语言函数,以便可以从汇编语言程序中调用它们?我知道gcc把C编译成机器码(可以很容易地反汇编成汇编语言),而且我已经知道inline assembly language functions in C是可以的,但是我还没有找到从汇编语言程序中调用C函数的方法,这基本上与此相反。
在这里,我试图在 x86 汇编程序中内联 C 函数。如果内联是不可能的,那么还有其他方法可以从汇编语言程序中调用 C 函数吗?
.686p
.model flat,stdcall
.stack 2048
.data
.code
start:
invoke ExitProcess, 0
printSomething PROC ;now I'm attempting to inline a C function here
void printSomething(thingToPrint){
printf("This is a C function that I want to invoke from an assembly language program.");
printf("There must be some way to do this - is it possible somehow?");
}
printSomething ENDP
end start
【问题讨论】:
-
我不记得所有细节,但您只需要编译为目标文件并将它们链接在一起。您只需要知道调用函数时使用了哪些调用约定。
-
您可以添加汇编代码以显示您尝试过的内容,并说明它如何编译失败或它的行为如何错误。答案会更容易指出它的问题所在。
-
您可以通过编写一个调用您要调用的函数的 C 函数、将其编译为汇编语言 (
-S) 并研究结果来学习如何做到这一点。我还想把你指向“psABI”,但我再也找不到副本了。 -
当然可以。只需遵循编译器 ABI 的规则即可。