Привет, мне пришлось написать сборку AT&T x86 для сборки Intel.
.section .data
str: .ascii "Hello world!\n"
strlen = . - str
num: .long 1337
.section .text
.global _start
_start:
movl $4, %eax
movl $1, %ebx
movl $str, %ecx
movl $strlen, %edx
int $0x80
movl $1, %eax
movl $0, %ebx
int $0x80
Это АТ&Т
.intel_syntax noprefix
.section .data
str: .ascii "Hello world!\n"
strlen = . - str
num: .long 1337
.section .text
.global _start
_start:
mov eax, 4
mov ebx, 1
mov ecx, offset str
mov edx, strlen
int 0x80
mov eax, 1
mov ebx, 0
int 0x80
Зачем мне это смещение. Я нашел это в другом вопросе о переполнении стека.
Компиляция с:
as --32 -o hello.o helloworld-a.asm
ld -m elf_i386 -o привет привет.о
./привет
Когда я его не использую, у меня нет вывода на консоль.
Спасибо :)
mov edx, [str]
в NASM, чтобы выполнить 4-байтовую загрузку с адреса метки. Но GAS.intel_syntax noprefix
похож на MASM. О различиях см. stackoverflow.com/tags/intel-syntax/info. - person Peter Cordes   schedule 29.10.2019strace
, чтобы увидеть, какие аргументы вы передаете системным вызовам. Даже дизассемблер синтаксиса AT&T показал бы вам проблему, поскольку вы знаете разницу междуmov $str, %ecx
иmov str, %ecx
. - person Peter Cordes   schedule 29.10.2019