Проблема блока/Соединения с nasm и ld

У меня есть демонстрационный файл блока, который я компилирую с nasm:

nasm -f elf syscall.asm 

Это генерирует syscall.o файл. Я пытаюсь связать его с ld:

ld -o syscall syscall.o

ld управляют сбоями со следующей ошибкой:

ld: i386 architecture of input file `syscall.o' is incompatible with i386:x86-64 output

Однако, если я делаю

ld -o syscall syscall.o -melf_i386

команда успешно выполняется, и я получаю syscall исполняемый файл.

Выяснение, что nasm не генерирует объектный код в x86-64 формате, я добавил "БИТЫ 64" директивы к началу syscall.asm файла.

Затем попытка собрать syscall.asm с nasm дала следующую ошибку:

error: elf output format does not support 64-bit code

Это кажется странным, потому что выполнение "файла/usr/bin/nasm" на моем терминале дает:

/usr/bin/nasm: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

Мое 64-разрядное Ядро Fedora 11 имеет последнюю версию установленного nasm, и моим ЦП является Intel Core 2 Duo E7200.

[Править]

Мой вопрос состоит в том, как я заставляю nasm испускать объектные файлы, который совместим с i386:x86-64.

6
задан ardsrk 11 February 2010 в 18:36
поделиться

1 ответ

Попробуйте использовать elf64 в качестве формата вывода.

Пример выполнения:

$ cat elf64.asm
section .text
        jmp [rax]
$ nasm -f elf64 elf64.asm
$ objdump -Sr elf64.o

elf64.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <.text>:
   0:   ff 20                   jmpq   *(%rax)
9
ответ дан 10 December 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: