我正在为一个类开发一个基于堆栈的缓冲区溢出。由于应用程序的性质,整个有效负载通过环境变量传递。在运行应用程序之前设置此环境变量 我的问题:我的溢出有时会起作用而在其他时候不起作用:
host@ubuntu:~/Documents/bufov$ gdb -q a.out
Reading symbols from /home/host/Documents/bufov/a.out...(no debugging symbols found)...done.
(gdb) run
Starting program: /home/host/Documents/bufov/a.out
p=���������������������������������������������������������������������������������������������������������������������������������^�1��F�F
�
����V
1ۉ�@̀�����/bin/sh
process 12189 is executing new program: /bin/dash
$ exit
[Inferior 1 (process 12189) exited normally]
(gdb) q
它可以正常工作。但是,如果我之后做了完全相同的事情,只添加一个断点并运行,我收到一个错误:
host@ubuntu:~/Documents/bufov/level9$ gdb -q a.out
Reading symbols from /home/host/Documents/bufov/a.out...(no debugging symbols found)...done.
(gdb) info file
Symbols from "/home/host/Documents/bufov/a.out".
Local exec file:
`/home/host/Documents/bufov/a.out', file type elf32-i386.
Entry point: 0x80484e0
....
(gdb) break *0x80484e0
Breakpoint 1 at 0x80484e0
(gdb) r
Starting program: /home/host/Documents/bufov/a.out
Breakpoint 1, 0x080484e0 in _start ()
(gdb) c
Continuing.
p=���������������������������������������������������������������������������������������������������������������������������������^�1��F�F
�
����V
1ۉ�@̀�����/bin/sh
process 12195 is executing new program: /bin/dash
/bin/sh: symbol lookup error: /bin/sh: undefined symbol: __gmon_start__
[Inferior 1 (process 12195) exited with code 0177]
为什么它在我的第二次运行中不起作用,有什么错误?