x86-64 asm: wie printf aufrufen?
-
hi!
ich habe mal 32bit assembler mit nasm für x86-prozessoren gelernt und wollte jetzt mal 64bit assembler ausprobieren. ich schaffe es aber nicht printf aufzurufen. argument-übergabe auf dem stack und über register geht beides nicht.
hier mal code:
extern printf segment .data fmt_str db "some value: %d", 0 segment .bss segment .text global main main: mov rsi, fmt_str xor rbp, rbp inc rbp push rbp push rsi call printf xor rax, rax ret
ich übersetze mit:
$ nasm -f elf64 print.s
$ gcc print.odas programm crasht in _IO_padn() mit einem segfault.
nasm version ist 2.0.
wo ist der fehler?
mfg
-
habe das problem gelöst.
erstmal waren die register für die argumente falsch (das waren die register für das zweite und dritte argument). außerdem muss rax 0 sein, weil printf sonst nach argumenten in den sse-registern sucht.
mfg