让ASM中的库在C中访问它?

时间:2014-10-18 20:51:08

标签: c assembly x86 intel-syntax

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

所以我知道我应该使用预先编写的库,但这仅用于教育目的和乐趣!所以比如说我想用sys调用打印到屏幕上,现在我写了一些程序集来做这个并命名函数print,然后我把它编译成某种lib文件.so / .lib / .a那时我该怎么做才能引用该库中的那个函数?

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

谢谢:)

1 个答案:

答案 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