-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