2

我知道您可以使用ASM直接将 ASM 放入 C 中,但我想知道是否可以在 Assembly 中创建一个库,对其进行编译,然后从 C 访问您在该库中声明的函数?

所以我知道我应该使用预先编写的库,但这只是为了教育目的和娱乐!例如,假设我想使用 sys 调用打印到屏幕上,现在我编写了一些程序集来执行此操作并将函数命名为 print,然后将其编译为某种 lib 文件 .so/.lib/.a那时我会做什么来引用该库中的该函数?

我只是写出函数并在编译时链接它吗?

谢谢 :)

4

1 回答 1

0

是的,您只需写出函数并将其编译/组装成 .o。然后,您可以像使用编译器中的 .o 一样使用 .o。如果你想把它变成一个库,只需将它用作arranlib的输入。

在 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
于 2014-10-23T02:46:34.050 回答