Kin*_*ere 6 c gcc gdb pointers buffer-overflow
我试图实现缓冲区溢出攻击,我需要知道我试图溢出的缓冲区的地址.
使用GDB显示的地址与我在代码中执行此操作时的地址不同:
确切的代码:
#include<stdio.h>
int main() {
char buffer[20];
printf("%p\n", buffer); // 0xbffff320
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做在gdb中:
p &buffer
Run Code Online (Sandbox Code Playgroud)
我明白了: 0xbffff330
为什么会有差异,它会搞砸我的缓冲区溢出攻击?
我禁用了ALSR和堆栈防护.
谢谢.
编辑1:即使我单步执行gdb并遇到打印行,我也会得到0xbffff320作为地址
编辑2:
环境:在Windows 7上的虚拟框中运行Ubuntu Linux 9映像.
gdb版本:6.8-debian
使用GCC编译,例如:gcc -g -fno-stack-protector filename.c
立即执行:./a.out
地址打印:0xbffff320
然后,在这样的调试器打开:gdb ./a.out
然后输入b main
然后run
再p &buffer
然后地址是0xbffff330
编辑3:
这是重现行为的gdb日志:
$ gdb ./a.out
b主要
跑
这里的p&buffer/*地址与运行可执行文件时显示的不同*/
步骤通过程序到printf语句/*地址这里和p和缓冲区相同但不同于程序运行时打印的内容*/
根据我的理解,问题main是当程序从shell启动时与从gdb启动时,本地变量的地址不同的原因.
这是一个显示差异的示例程序:
mp@ubuntu:~$ cat s.c
#include<stdio.h>
int main(int argc, char **argv) {
char buffer[20];
system("env");
printf("%s %p\n", argv[0], buffer);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我们将在干净的环境中运行它.(我也禁用了ASLR).
mp@ubuntu:~$ env -i sh
$ ./s
PWD=/home/mp
./s 0xbffffe48
Run Code Online (Sandbox Code Playgroud)
$ gdb ./s
(gdb) run
Starting program: /home/mp/s
COLUMNS=80
PWD=/home/mp
LINES=42
/home/mp/s 0xbffffe08
Run Code Online (Sandbox Code Playgroud)
gdb print &buffer命令的输出与程序对地址的想法相同,但它们都与程序在shell中运行时不同.
(gdb) b 6
Breakpoint 1 at 0x804849c: file s.c, line 6.
(gdb) run
Starting program: /home/mp/s
COLUMNS=80
PWD=/home/mp
LINES=42
Breakpoint 1, main (argc=1, argv=0xbffffed4) at s.c:6
6 printf("%s %p\n", argv[0], buffer);
(gdb) p &buffer
$1 = (char (*)[20]) 0xbffffe08
(gdb) n
/home/mp/s 0xbffffe08
8 return 0;
Run Code Online (Sandbox Code Playgroud)
有一些因素导致了这种差异:
readline/shell.c:sh_set_lines_and_columns().因此环境阵列更大.要从环境中删除这两个变量,可以使用unset environment,或设置exec-wrapper来运行env -u ....这样,gdb下的程序地址与在shell中运行时的地址相同(如果我们使用绝对路径名).
$ `pwd`/s
PWD=/home/mp
/home/mp/s 0xbffffe28
$ gdb `pwd`/s
(gdb) set exec-wrapper env -u LINES -u COLUMNS
(gdb) run
Starting program: /home/mp/s
PWD=/home/mp
/home/mp/s 0xbffffe28
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4978 次 |
| 最近记录: |