Код: Выделить всё
global _start ; делаем метку метку _start видимой извне
section .data ; секция данных
message: db "Hello, word!",10 ; строка для вывода на консоль
section .text ; объявление секции кода
_start: ; объявление метки _start - точки входа в программу
mov eax, 1 ; 1 - номер системного вызова функции write
mov edi, 1 ; 1 - дескриптор файла стандартного вызова stdout
mov esi, message ; адрес строки для вывод
mov edx, 13 ; количество байтов
syscall ; выполняем системный вызов write
mov eax, 60 ; 60 - номер системного вызова exit
syscall ; выполняем системный вызов exit
Shell
$ nasm -f elf32 hello.asm
$ ld --oformat=elf32-i386 -o hello hello.o
ld: архитектура i386 входного файла «hello.o» несовместима с выходным i386:x86-64
$
...
--oformat=output-format
ld may be configured to support more than one kind of object file. If your ld is configured
this way, you can use the --oformat option to specify the binary format for the output object
file. Even when ld is configured to support alternative object formats, you don't usually need
to specify this, as ld should be configured to produce as a default output format the most usual
format on each machine. output-format is a text string, the name of a particular format
supported by the BFD libraries. (You can list the available binary formats with objdump -i.)
The script command "OUTPUT_FORMAT" can also specify the output format, but this option overrides
it.
...
То есть нужные нам форматы надо посмотреть так:
Shell
$ objdump -i
Файл заголовка BFD версия (GNU Binutils for Debian) 2.40
elf64-x86-64
(заголовок от младшего к старшему, данные от младшего к старшему)
i386
elf32-i386
(заголовок от младшего к старшему, данные от младшего к старшему)
i386
elf32-iamcu
(заголовок от младшего к старшему, данные от младшего к старшему)
iamcu
elf32-x86-64
(заголовок от младшего к старшему, данные от младшего к старшему)
i386
pei-i386
(заголовок от младшего к старшему, данные от младшего к старшему)
i386
pe-x86-64
(заголовок от младшего к старшему, данные от младшего к старшему)
i386
pei-x86-64
(заголовок от младшего к старшему, данные от младшего к старшему)
i386
elf64-little
(заголовок от младшего к старшему, данные от младшего к старшему)
i386
iamcu
elf64-big
(заголовок от старшего к младшему, данные от старшего к младшему)
i386
iamcu
elf32-little
(заголовок от младшего к старшему, данные от младшего к старшему)
i386
iamcu
elf32-big
(заголовок от старшего к младшему, данные от старшего к младшему)
i386
iamcu
pe-bigobj-x86-64
(заголовок от младшего к старшему, данные от младшего к старшему)
i386
pe-i386
(заголовок от младшего к старшему, данные от младшего к старшему)
i386
pdb
(заголовок от младшего к старшему, данные от младшего к старшему)
srec
(заголовок байтовый порядок неизвестен, данные байтовый порядок неизвестен)
i386
iamcu
symbolsrec
(заголовок байтовый порядок неизвестен, данные байтовый порядок неизвестен)
i386
iamcu
verilog
(заголовок байтовый порядок неизвестен, данные байтовый порядок неизвестен)
i386
iamcu
tekhex
(заголовок байтовый порядок неизвестен, данные байтовый порядок неизвестен)
i386
iamcu
binary
(заголовок байтовый порядок неизвестен, данные байтовый порядок неизвестен)
i386
iamcu
ihex
(заголовок байтовый порядок неизвестен, данные байтовый порядок неизвестен)
i386
iamcu
plugin
(заголовок от младшего к старшему, данные от младшего к старшему)
elf64-x86-64 elf32-i386 elf32-iamcu elf32-x86-64 pei-i386 pe-x86-64
i386 elf64-x86-64 elf32-i386 ----------- elf32-x86-64 pei-i386 pe-x86-64
iamcu ------------ ---------- elf32-iamcu ------------ -------- ---------
pei-x86-64 elf64-little elf64-big elf32-little elf32-big
i386 pei-x86-64 elf64-little elf64-big elf32-little elf32-big
iamcu ---------- elf64-little elf64-big elf32-little elf32-big
pe-bigobj-x86-64 pe-i386 pdb srec symbolsrec verilog tekhex binary
i386 pe-bigobj-x86-64 pe-i386 --- srec symbolsrec verilog tekhex binary
iamcu ---------------- ------- --- srec symbolsrec verilog tekhex binary
ihex plugin
i386 ihex ------
iamcu ihex ------
$
Shell
$ ld --oformat=elf32-i386 -o code code.o
ld: архитектура i386 входного файла «code.o» несовместима с выходным i386:x86-64
$
$ ld --oformat=elf32-little -o code code.o
ld: архитектура i386 входного файла «code.o» несовместима с выходным i386:x86-64
$