【发布时间】:2017-01-11 05:14:21
【问题描述】:
如果我只是执行shell代码程序它会产生这样的分段错误
desktop:~$ ./sh02
Segmentaion fault (core dumped)
但是,当我用 GDB 调试这个程序时,这个程序执行 /bin/sh 成功
(gdb) disass 0x4005a0
No function contains specified address.
(gdb) shell ps
PID TTY TIME CMD
4075 pts/4 00:00:00 bash
4099 pts/4 00:00:00 gdb
4101 pts/4 00:00:00 sh
4107 pts/4 00:00:00 ps
(gdb)
用GDB调试后,这个程序运行良好... 我找不到它们之间的区别
为什么我不能在调试前通过sh02程序运行/bin/sh?
const char str[]=
"\x55"
"\x48\x89\xe5"
"\x48\x31\xff"
"\x57"
"\x57"
"\x5e"
"\x5a"
"\x48\xbf\x2f\x2f\x62\x69\x6e"
"\x2f\x73\x68"
"\x57"
"\x54"
"\x5f"
"\x6a\x3b"
"\x58"
"\x0f\x05"
"\x90"
"\x5d"
"\xc3";
int main()
{
int (*func)();
func = (int (*)()) str;
(int)(*func)();
}
以上是sh02.c代码。
我阅读了这些问题和答案。但我认为我的情况有点不同。在使用 GDB 调试期间和调试 sh02 程序后,成功执行 /bin/sh。但是只有在调试之前,它才会导致分段错误
我使用 Ubuntu 16.04 和 x64 架构
【问题讨论】:
-
我阅读了那个问题和答案。但我认为我的情况有点不同。在使用 GDB 调试期间和调试 sh02 程序后,成功执行 /bin/sh。但是只有在调试之前,它才会导致分段错误。
-
虽然它似乎不是上面提到的重复,但问题本身有点模糊。我的理解是您想知道为什么程序在以调试模式运行之前无法运行,但之后又可以正常运行?
标签: c segmentation-fault gdb shellcode