为什么这个 x64 堆栈有其他字节并且似乎是相反的顺序?
逆向工程
C
数据库
堆
2021-07-02 14:49:26
1个回答
为什么在 3 个堆栈字符串之间有一整行其他数据?
首先,在x64Linux 代码中,堆栈应该16在任何函数调用之前与字节对齐,因此您可以预期rsp在编译器生成的代码中将如此对齐。
现在,这只是编译器决定将用于项目分配的字节数。在GCC,例如,你可以设置堆栈项目的权力的对齐n的2,使用-mpreferred-stack-boundary=n的选项,根据公认的答案。
为什么我的第一个堆栈字符串实际上在堆栈顶部?我想如果我连续有 3 个堆栈字符串,那么在 C 程序中首先出现的字符串将位于堆栈底部,而最后一个推送的字符串将位于顶部。
同样,只要生成符合C标准的代码,编译器将决定如何在堆栈上组织局部变量。我同意,自然的方法是将参数按声明的顺序放在堆栈上,但如您所见,您不能一般地假设这一点。如果你想强制这个顺序,你可以根据这个答案把它们放在一个结构中。
