-2
說我在下面有這個彙編代碼。那麼printf如何知道要打印什麼呢?它是否只是打印出地址上的任何東西?在這種情況下,「推消息」?程序集中的printf如何知道要打印什麼?
SECTION .data
msg: db "Hello World!",10,0
SECTION .text
extern printf
global main
main:
push ebp
move ebp, esp
push msg
call printf
move esp, ebp
pop ebp
ret
是的,它看起來像其他任何函數的參數。閱讀ABI /調用約定來了解如何將args傳遞給函數。 http://stackoverflow.com/tags/x86/info –
它從堆棧內存('ss:esp')中獲取格式字符串地址,作爲返回地址之後的下一個值,無論您如何設置內存到某個值,在'call'之前執行'push'是一種方便和普通的「正常」方式,但是我可以用'mov','sub'和'jmp'指令模擬相同的內容(不推送'或'call')。 – Ped7g