c - 了解 mpreferred-stack-boundary=number

标签 c gcc assembly

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

最佳答案

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

关于c - 了解 mpreferred-stack-boundary=number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27371820/

相关文章:

来自汇编的 C 循环代码

c++ - 交换指针

c - 为什么允许结构中未定义大小的数组?

c - "make"错误,当我想制作 libsvm(系统 : MAC OS X 10. 12.6)

c++ - 使 ld 忽略/etc/ld.so.conf 中的目录

c - BCM2708 (RPi) Rasbpian FIQ 未触发

c++ - 圆形 float :Print exactly two digits after the decimal point rounded to the nearest decimal place

c++ - 从函数内部获取函数名称和参数值的宏

c - 数组大小作为变量 - 现在正确的是什么?

xcode - Mac 上的 x86 汇编