我正在尝试可视化和理解如何利用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时工作但在默认模式下运行时不起作用?
答案 0 :(得分:2)
整个堆栈帧的大小将四舍五入为16个字节,而不是每个单独的局部变量。 Shellcode可以以任何方式工作,但代码是针对一个特定的布局编写的,因此您需要为不同的布局使用不同的shellcode。 - 杰斯特