我按照教授的指示运行FedoraCore6。我试图简单地运行实验室指令提供的shellcode,我继续得到Segmentation故障。我们被告知我们可以通过使用命令关闭堆栈gaurd进行编译 gcc-fno-stack-protector call_shellcode.c 无论哪种方式,我只是编译代码使用gcc -o shell call_callshellcode.c或使用-fno-stack-protector命令我在启动代码时遇到分段错误而不是调用shell。有什么帮助吗? 所以我为本实验室提供了如下代码:
#include <stdlib.h>
#include <stdio.h>
const char code[] =
"\x31\xc0"
"\x50"
"\x68""//sh"
"\x68""\bin"
"\x89\xe3"
"\x50"
"\x53"
"\x89\xe1"
"\x99"
"\xb0\x0b"
"\xcd\x80"
;
int main(int argc, char **argv)
{
char buf[sizeof(code)];
strcpy(buf, code);
((void(*) ( ))buf)();
}
答案 0 :(得分:4)
dmesg| tail
。此输出中的最后一行将显示SEGFAULT发生时指令指针所在的位置。-ggdb
标志集编译程序。 ulimit -c unlimited
以确保在程序SEGFAULTs时生成核心转储。Segmentation Fault (core dumped)
。在本地目录中,您应该看到一个名为core
的新文件。 gdb -c core
以分析核心转储。gdb
后,输入bt
或backtrace
即可确切了解SEGFAULT的位置。 info registers
,info locals
,info args
等命令来分析您拥有的值。使用x/x $esp
(或任何其他寄存器名称)来检查各个寄存器包含的内容。