0

我有一个简单的 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

代码片段和组装/链接步骤来自本书:Introduction to 64bit Intel Assembly Language Programming

任何关于为什么这不起作用的指针将不胜感激。

4

2 回答 2

1

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

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

于 2013-10-06T15:20:33.110 回答
0

使用 Linux 系统调用的 Cygwin 二进制文件无法在 Windows 上运行 - 即使通过 cygwin。有关更多信息,请参阅此答案

于 2013-10-16T06:06:21.757 回答