小编Joe*_*oeB的帖子

无论我如何在C中编码它,为什么int变量不会在char数组之前进行寻址?

我正在阅读Hacking:剥削艺术(第2版),我目前正在讨论缓冲区溢出问题.

在第一个示例中,变量按以下顺序声明/初始化:

int auth_flag = 0;
char password_buffer[16];
Run Code Online (Sandbox Code Playgroud)

这个例子接着解释,你可以使用gdb来检查auth_flagpassword_buffer的地址,你会发现auth_flag的地址是高于password_buffer的.要记住的事情:我在Macbook Pro(英特尔处理器,64位)上的Virtualbox中运行Ubuntu中的所有这些.

我编译了第一个例子的代码,如下所示: gcc -g -fno-stack-protector -o auth_overflow auth_overflow.c

正如所料,auth_flag地址高于password_buffer's.

为了解决上面提出的问题,作者解释说你应该切换声明的顺序:

char password_buffer[16];
int auth_flag = 0;
Run Code Online (Sandbox Code Playgroud)

我以相同的方式编译代码: gcc -g -fno-stack-protector -o auth_overflow2 auth_overflow2.c

不幸的是,我没有看到auth_flag地址低于password_buffer.事实上,它仍然更高.为什么是这样?我究竟做错了什么?

c stack buffer frames overflow

8
推荐指数
2
解决办法
334
查看次数

标签 统计

buffer ×1

c ×1

frames ×1

overflow ×1

stack ×1