问题描述
我注意到只允许对8字节或2字节的值执行push
。例如:
push $5 # same as pushq
# sub $8,%rsp
# movq $5,(%rsp)
或者:
pushw $3
# sub $2,%rsp
# movw $3,(%rsp)
并使用gdb
确保堆栈看起来正确:
>>> x/5hd $rsp
0x7fffffffe426: 3 5 0 0 0
但是,所有其他后缀都给我:
错误:“ push”的指令后缀无效
为什么push
只允许使用64位或16位值?使用sub...mov
来更具体是常见的做法,还是那是一种反模式?最后,cpu是将push
解释为与sub...mov
指令一样,还是它们完全是两个不同的东西(产生相同的结果)?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)