我知道您可以使用 ASM 直接将ASM放入C中,但我想知道是否可以在Assembly中创建一个库,编译它然后从C访问您在该库中声明的函数?
所以我知道我应该使用预先编写的库,但这仅用于教育目的和乐趣!所以比如说我想用sys调用打印到屏幕上,现在我写了一些程序集来做这个并命名函数print,然后我把它编译成某种lib文件.so / .lib / .a那时我该怎么做才能引用该库中的那个函数?
我是否只写出了函数并在编译时链接它?
谢谢:)
答案 0 :(得分:0)
是的,你只需编写函数并将其编译/汇编成.o。然后,您可以像编译器中的.o一样使用.o。如果要将其转换为库,只需将其用作 ar 和 ranlib 的输入。
在x86上使用gcc的最简单示例:
将其放入test.s:
.globl some_func
some_func:
ret
编译: cc -c test.s
这将生成一个定义了函数 some_func 的test.o文件。
一个更完整的例子,什么都不做C函数 foo 不带参数(gcc x86-64):
.globl foo
.type foo, @function
foo:
pushq %rbp
movq %rsp, %rbp
leave
ret