您好,我一直在尝试用汇编语言编写一个简单的 hello world 程序,并将其编译为 .o 文件,然后将其与标准 C 库链接以创建 .exe,以便我可以在我的计算机上查看“puts”的反汇编结果。系统使用gdb -tui. 我正在将 Cygwin 与以下实用程序版本一起使用(使用 获得这些版本as --version && ld --version)。我正在尝试在 Windows 8 x64 上完成这一切。
作为版本 2.25
LD版本2.25
测试.asm
我在学习 x86 汇编时在互联网上看到了几种汇编标准。我想我在这里写的是GAS。
.extern puts
_start:
mov $msg, %rdi
call puts
xor %rax, %rax
ret
msg:
.ascii "hello world"
Run Code Online (Sandbox Code Playgroud)
汇编器
我可以毫无问题地组装上述文件,该as实用程序不会给我警告或任何错误,这是我调用该as实用程序的方式。
as test.asm -o test.o
连接器
这就是我遇到麻烦的地方,下面的命令是我认为应该如何将目标文件与标准 c 库链接起来。
ld test.o -o test.exe -lc
该命令会产生以下错误,我对此感到困惑。我试图在其他帖子和通过谷歌找到答案,但也许我错过了一些东西。
test.o:fake:(.text+0x3): relocation truncated to fit: R_X86_64_32S against `.text`
/usr/lib/libc.a(t-d000957.o):fake:(.text+0x2): undefined reference …Run Code Online (Sandbox Code Playgroud)