偏移量:了解x86而不是x64中main的偏移量

时间:2019-04-18 13:46:40

标签: c assembly x86 callstack abi

之所以来找您,是因为我不明白在main函数中,例如当我在char缓冲区[20]中执行简单的scanf时,在x86中它是在push ebp的开头出现的:

lea    ecx,[esp+0x4]
and    esp,0xfffffff0 ;
push   DWORD PTR [ecx-0x4] ;

而且绝对不在x64中,它直接推送rbp。

我了解到:

  • 段就像内存中的里程碑
  • 偏移量是在两个线段之间到达精确位置的信息(偏移量)
  • 在上述情况下,编译器希望在压入任何内容之前将堆栈指针对齐到16个字节的限制,因为必须对齐某些指令的内存(传递给scanf的将来值的地址?)这样。

由于以下链接,我大致了解x86的原理:trying to understand the main disassembly first instructions

但是,我的问题是:为什么在x64中,编译器也不需要执行这些操作?

在此感谢您阅读我的时间以及对我的问题的回答。

0 个答案:

没有答案