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.o

    das 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


Anmelden zum Antworten