Sto lavorando ad alcuni tutorial su http://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html per familiarizzare con x86/x64. Questo codice esercitazione compilato ed eseguito senza un singhiozzo utilizzando il codice fornito, che usa AT & sintassi T:Perché il passaggio da AT & T a sintassi Intel rende questo tutorial segfault usando GAS?
.global main
.text
main: # This is called by C library's startup code
mov $message, %rdi # First integer (or pointer) parameter in %edi
call puts # puts("Hello, World")
ret # Return to C library code
message:
.asciz "Hello, World" # asciz puts a 0x00 byte at the end
Tuttavia, quando converto questo codice per la sintassi Intel, ottengo un errore "Segmentation fault".
.intel_syntax noprefix
.global main
.text
main: # This is called by C library's startup code
mov rdi, message # First integer (or pointer) parameter in %edi
call puts # puts("Hello, World")
ret # Return to C library code
message:
.asciz "Hello, World" # asciz puts a 0x00 byte at the end
Non ho familiarità con x86, quindi forse mi manca qualcosa. Qualche idea?
Hai confrontare le uscite binarie? –
@ JensBjörnhager, non ho confrontato le uscite binarie. Sono un novizio in assemblea, e so anche meno binario. C'è qualcosa di specifico che posso ottenere confrontando i binari senza essere un guru di basso livello? – Alex
Probabilmente, è stato menzionato 'mov rdi, offset message'? –