我正在研究没有宏的结构(纯组装)。
想象一下功能和结构
foo(struct house* ip)
house{
short a;
short b;
int c;
}
汇编程序:
push 0 ; c = 0
pushw 11 ; b = 11
pushw 0 ; a = 0
mov ecx, esp ; pointer to the structure
execute->foo(ecx)
两个问题: 1.结构后asm中的结构必须为NULL?我已经看到一些代码放置null而其他代码没有。 2.怎么知道“asm”esp引用我的结构?变量由ebp +nº字节
引用答案 0 :(得分:0)
在汇编中没有要求结构在它们之后具有NULL。
esp
始终指向您刚刚在堆栈上推送的内容,并且正确地假设堆栈在内存中向下增长。
但是,您无法使用推送设置任意结构,就像您在这里尝试一样。
堆栈条目具有一定的固定宽度(通常为16,32或64位),具体取决于CPU运行的模式,因此只有在结构中的所有元素都具有宽度时,您的方法才有效,这是堆栈条目的倍数。