我正在尝试为简单的hello world程序生成汇编语言列表
我跑了gcc -S file.c
并生成了file.s。
我使用生成的.s文件使用以下脚本:
#!/bin/bash -x
NAME=file1
for i in *.s; do
as -o ${i%.s}.o $i
done
ld -static -o $NAME *.o
objdump -D $NAME
当我使用它时,我收到一个错误:
In function `main':
(.text+0x16): undefined reference to `printf'
非常感谢任何帮助。
答案 0 :(得分:1)
使用gcc -fverbose-asm -S -Wall
进行编译(也可能-O
或-O2
)
-fverbose-asm
在汇编程序中生成一些有用的注释。
使用gcc -v
了解程序的链接方式。您需要启动代码(例如某些crt0.o
),您需要至少链接libc.so.6
或libc.a
。
在编译和链接gcc -v
时,会显示中间步骤以及隐式对象文件和库。 gcc
刚刚启动其他程序,如cc1
(编译器本身)和as
(汇编程序)和ld
链接程序。有时collect2
是一种链接器。
gcc
使用它。例如,代码只是汇编中的一个例程,其余代码在C中。然后运行gcc -v -Wall routine.s main.c -o prog
另请阅读Linux Assembly HowTo。