我正在尝试执行一个 shellcode,但是我在执行它时遇到了问题。(我使用的是 x86 32 位 CPU)
char shellcode[] =
// <_start>
"\x31\xc9" // xor %ecx,%ecx
"\xf7\xe1" // mul %ecx
"\x51" // push %ecx
"\x68\x2f\x2f\x73\x68" // push $0x68732f2f
"\x68\x2f\x62\x69\x6e" // push $0x6e69622f
"\x89\xe3" // mov %esp,%ebx
"\xb0\x0b" // mov $0xb,%al
"\xcd\x80" // int $0x80
上面的代码来自这里
当我用我的 gdb 调试器调试它时,带有地址的汇编代码如下所示
0xbffff6e6: xor %ecx,%ecx
0xbffff6e8: mul %ecx
0xbffff6ea: push %ecx
0xbffff6eb: push $0x68732f2f
0xbffff6f0: push $0x6e69622f
0xbffff6f5: mov %esp,%ebx
0xbffff6f7: mov $0xb,%al
0xbffff6f9: int $0x80
0xbffff6fb: add %al,(%eax)
0xbffff6fd: jmp 0xbffff727
问题是......当我在 0xbffff6e6 中断时,我无法执行下一条指令,当我继续时 mul %ecx,gdb 调试器给了我这个错误
Program received signal SIGSEGV, Segmentation fault.
0xbffff6e6 in ?? ()
据我所知,当我尝试访问不允许访问的内存地址时会发生分段错误。
我怎样才能让它在我的电脑上运行?同样,我在 Ubuntu Linux 上使用英特尔 x86-32 CPU。我提前感谢。