作者:锶飨_646_165 | 来源:互联网 | 2022-12-02 08:11
我有这个结构:
struct Books {
char title[50];
char author[50];
};
让我说我知道如果我传递arg1
给程序,在代码的某些部分,它会在方向上添加一些字符$title+52
,因此author
值被覆盖(缓冲区溢出).
现在我将ASLR添加到我的二进制文件中.通过这种方式,一些方向是随机的,所以我认为我之前描述的缓冲区溢出是不可能的.
这是真的?或者即使我添加ASLR,结构成员的方向也在一起,缓冲区溢出是可能的吗?
1> dbush..:
你提到的特定溢出仍然是可能的.
除了位域之外,结构的字段在存储器中按顺序彼此跟随(在它们之间具有一些可能的填充).这在C标准的 6.7.2.1p15节中详细说明:
在结构对象中,非位字段成员和位字段所在的单元具有按声明顺序增加的地址. 指向适当转换的结构对象的指针指向其初始成员(或者如果该成员是位字段,则指向它所在的单元),反之亦然.结构对象中可能存在未命名的填充,但不是在其开头.
因此,在这种情况下,无论类型对象位于何种特定地址,该author
字段都将始终跟随该title
字段struct Books
.唯一可能的差异可能是填充量,但除非您在结构中添加或删除字段,否则这可能不会改变.