地址空间布局随机化和C中的结构

Mig*_*l.G 3 c memory struct buffer-overflow aslr

我有这个结构:

struct Books {
 char  title[50];
 char  author[50];
};
Run Code Online (Sandbox Code Playgroud)

让我说我知道如果我传递arg1给程序,在代码的某些部分,它会在方向上添加一些字符$title+52,因此author值被覆盖(缓冲区溢出).

现在我将ASLR添加到我的二进制文件中.通过这种方式,一些方向是随机的,所以我认为我之前描述的缓冲区溢出是不可能的.

这是真的?或者即使我添加ASLR,结构成员的方向也在一起,缓冲区溢出是可能的吗?

dbu*_*ush 5

你提到的特定溢出仍然是可能的.

除了位域之外,结构的字段在存储器中按顺序彼此跟随(在它们之间具有一些可能的填充).这在C标准的 6.7.2.1p15节中详细说明:

在结构对象中,非位字段成员和位字段所在的单元具有按声明顺序增加的地址. 指向适当转换的结构对象的指针指向其初始成员(或者如果该成员是位字段,则指向它所在的单元),反之亦然.结构对象中可能存在未命名的填充,但不是在其开头.

因此,在这种情况下,无论类型对象位于何种特定地址,该author字段都将始终跟随该title字段struct Books.唯一可能的差异可能是填充量,但除非您在结构中添加或删除字段,否则这可能不会改变.