【发布时间】:2012-01-03 14:47:13
【问题描述】:
我正在尝试学习 shell 代码,但我的 Ubuntu 机器中不断出现分段错误。
/*shellcodetest.c*/
char code[]="\xeb\x19\x31\xc0\x31\xdb\x31\xd2\x31\xc9\xb0\x04\xb3\x01"\
"\x59\xb2\x05\xcd\x80\x31\xc0\xb0\x01\x31\xdb\xcd\x80\xe8"\
"\xe2\xff\xff\xff\x68\x65\x6c\x6c\x6f\xe8\xd8\xff\xff\xff"\
"\x68\x65\x6c\x6c\x6f\xe8\xce\xff\xff\xff\x68\x65\x6c\x6c"\
"\x6f\xe8\xc4\xff\xff\xff\x68\x65\x6c\x6c\x6f\xe8\xba\xff"\
"\xff\xff\x68\x65\x6c\x6c\x6f";
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
}
我不明白为什么这会失败。我在想也许是一个空指针。 如果您有任何想法我可以跟进,那就太好了。
【问题讨论】:
-
它有什么作用?我的意思是,你能展示一个反汇编或任何东西吗?
-
你应该问的问题是,为什么以及如何工作。
-
你确定你的shellcode是正确的吗?
-
疯狂猜测:地址空间随机化?
-
确保代码的架构正确。如果这是 32 位代码,而您正在编译 64 位二进制文件,那么它可能无法正常工作。
标签: c segmentation-fault