Assembly 链接器输出';重新定位截断以适应:R#u X86_64_32';尝试链接yasm汇编程序时

Assembly 链接器输出';重新定位截断以适应:R#u X86_64_32';尝试链接yasm汇编程序时,assembly,cygwin,ld,Assembly,Cygwin,Ld,我有一个简单的asm文件: $ cat my.asm segment .text global _start _start: mov eax,1 mov ebx,5 int 0x80 使用yasm组装工作正常: $ yasm -f elf64 -g dwarf2 -l my.lst my.asm 链接返回一些输出: $ ld -o my my.o my.o:(.debug_aranges+0x6): relocation t

我有一个简单的asm文件:

$ cat my.asm
    segment .text
    global _start

_start:
        mov eax,1
        mov ebx,5
        int 0x80
使用yasm组装工作正常:

$ yasm -f elf64 -g dwarf2  -l my.lst my.asm
链接返回一些输出:

$ ld -o my my.o
my.o:(.debug_aranges+0x6): relocation truncated to fit: R_X86_64_32 against `.debug_info'
my.o:(.debug_info+0x6): relocation truncated to fit: R_X86_64_32 against `.debug_abbrev'
my.o:(.debug_info+0xc): relocation truncated to fit: R_X86_64_32 against `.debug_line'
但是,不会创建任何可执行文件

我的环境是:

$ yasm --version
yasm 1.2.0

$ ld --version
GNU ld (GNU Binutils) 2.23.52.20130604

$ uname -a
CYGWIN_NT-6.1 MYHOST 1.7.25(0.270/5/3) 2013-08-31 20:37 x86_64 Cygwin
代码片段和组装/链接步骤来自本书:


任何关于为什么这不起作用的指针都将受到赞赏。

您肯定在编写32位代码(“int 0x80”),但编译/汇编为64位代码(“f elf64”)


必须将代码汇编为32位代码。

使用Linux系统调用的Cygwin二进制文件不能在windows上运行,即使是通过Cygwin。请参阅以了解更多信息。

可能与此相关,即使情况不完全相同:也请查看
-a
-m
选项以
yasm
-f
仅设置对象格式,您可能还需要告诉
yasm
将代码设置为64位。我注意到错误似乎出现在.debug部分。如果不使用
-g
开关组装,会发生什么情况?如果我放下
-g
开关,链接工作正常。但是,运行二进制文件会导致分段错误。这表明cygwin在linux类型调用方面存在问题。代码和汇编/链接步骤来自以下书籍:(