了解mpreferred-stack-boundary = number

我正在尝试可视化和理解如何利用mpreferred-stack-boundary(更像是构建代码来利用它来学校)。 从阅读gcc手册,它指出它根据mpreferred-stack-boundary = number对齐堆栈,其中number是指向base 2的指数。默认情况下,number = 4所以堆栈的对齐是2 ^ 4 = 16字节。 我不知道咖啡因是否与我的大脑混乱,但我在课堂上看到的所有shell代码注入要求我们在编译时使用mpreferred-stack-boundary = 2,这会使堆栈对齐4个字节。 那么这是否意味着我已经放置在堆栈上的变量默认尝试一次填充16个字节的堆栈? 另外,为什么我放在缓冲区中的shellcode在设置为2时的边界工作但在默认模式下运行时不起作用?

整个堆栈帧的大小将四舍五入到16个字节,而不是每个单独的局部变量。 Shellcode可以以任何方式工作,但代码是针对一个特定的布局编写的,因此您需要为不同的布局使用不同的shellcode。 – 杰斯特