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