如何在NASM中导出符号

时间:2016-02-01 16:54:50

标签: gcc assembly nasm x86-64

我的功能不是由NASM汇编程序导出的,因此我无法将其与我的C程序链接。我正在使用gzinflate(substr(base64_decode($base64),10));指令,如手册所述,但它无法识别。怎么了?我是这样做的:

export

如果我省略[niko@dev1 test]$ cat ssefuncs.S use64 section .data NEW_LINE_4_SSE db '1111111111111111' section .text export find_nl_sse find_nl_sse: mov rax,NEW_LINE_4_SSE movntdqa xmm0,[esi] pcmpestri xmm0,[rax],0x0 ret [niko@dev1 test]$ nasm -f elf64 -o ssefuncs.o ssefuncs.S ssefuncs.S:7: error: parser: instruction expected [niko@dev1 test]$ ,重新编译程序集并尝试链接,则生成的代码不会与我的C程序链接:

export

我也尝试添加[niko@dev1 test]$ gcc -o bench3 ssefuncs.o bench3.o bench3.o: In function `main': /home/niko/quaztech/qstar/test/bench3.c:34: undefined reference to `find_nl_sse' collect2: error: ld returned 1 exit status [niko@dev1 test]$ 指令但是我得到了同样的错误。为什么NA​​SM文档如此误导?

1 个答案:

答案 0 :(得分:4)

这是将标签定义为在当前装配单元外可见的正确方法。

HighlightBrushKey
  1. global _main _main: 语句必须位于实际标签
  2. 之前
  3. 标签必须以单个下划线开头
  4. C文件会将标签引用为

    global