Goo*_*ies 7 c segmentation-fault shellcode
我写了一个简单的ASM文件并在我编写的C文件中运行它.我得了一个太阳故障.但是,当我执行编译的ASM文件时,我没有得到任何错误.
我正在运行64位并使用32位shellcode.这是问题吗?
它不可能,因为我得到了一个分段错误:
char shellcode[] = "\x90"; //simple NOP in ASM
int main(int argc, char **argv)
{
int (*ret)();
ret = (int (*)()) shellcode;
(int)(*ret)();
}
Run Code Online (Sandbox Code Playgroud)
有人可以运行这个并告诉我他们是否会出现分段错误.我也使用了3或4个其他C文件.没有人工作过.
更新:
((void(*)(void))code)();
Run Code Online (Sandbox Code Playgroud)
似乎代替这三条线.
如上所述,shellcode位于非可执行存储器中.尝试使用-fno-stack-protector和-z execstack标志重新编译程序.
那是:
gcc -fno-stack-protector -z execstack -O OutputFileName yourShellCode.c
两个问题:
mprotect(2)或VirtualProtect()),或者分配新的可执行内存并将其复制到那里(例如使用mmap(2)或VirtualAlloc().要修复#2,您需要显式执行返回指令(C3在 x86/x86-64 上)以从 shell 代码返回,或者您需要执行一些永远不会返回的操作,例如调用函数exit(3)。