假設我們有將Z打印到屏幕上的彙編代碼。如何用機器語言調用printf
pushl $'Z'
call putchar
add $4, %esp
我們怎樣才能在機器語言代碼中編寫它?我已經檢查了gdb中的在線資源和這段代碼,但前者不同意後者,後者每次運行代碼時都會更改。感謝您的幫助。
我正在使用Linux x86。再次,我想說我想知道如何在機器語言代碼中編寫它。
假設我們有將Z打印到屏幕上的彙編代碼。如何用機器語言調用printf
pushl $'Z'
call putchar
add $4, %esp
我們怎樣才能在機器語言代碼中編寫它?我已經檢查了gdb中的在線資源和這段代碼,但前者不同意後者,後者每次運行代碼時都會更改。感謝您的幫助。
我正在使用Linux x86。再次,我想說我想知道如何在機器語言代碼中編寫它。
使用putchar
而不是printf
。 printf
需要一個string
,並且您提供了一個char
。另外,請記住,您必須在調用函數後立即還原堆棧,因爲printf
和putchar
都使用cdecl
調用約定。
pushl $'Z'
call putchar
add $4, %esp
值得注意的是,如果機器是amd64,那麼abi要求第一個參數在%rdi中,而不是在堆棧上,假設您使用的是SysV ABI。 http://en.wikipedia.org/wiki/X86_calling_conventions上x86架構的其他調用約定。 – dho
什麼架構? –
爲什麼使用匯編語言? –
機器語言(即十六進制代碼)還是程序集? –