我是汇编编程的新手,我想知道为什么变量的地址总是被推送到堆栈而不是实际的变量。例如:
.text:00401270 push ebp
.text:00401271 mov ebp, esp
.text:00401273 sub esp, 80h
.text:00401279 push offset aString1
.text:0040127E call sub_401554
为什么实际变量从不作为参数推送?
答案 0 :(得分:2)
并非所有的“函数”参数都必须通过引用传递,但是您的示例是一个字符串,由于其变量大小在堆栈上不合适而通过引用传递。
在返回之前调用函数和清理的具体细节将根据您要与之接口的调用约定而有所不同。
如果您的调用者始终是您控制的汇编代码,您可以选择在堆栈上传递短参数,但是传递指针可以让您使用更大更复杂的数据结构,因此更有可能需要手动编码的候选者 - 装配优化。