C中意外的分段错误

时间:2018-02-18 00:05:27

标签: linux gcc assembly x86 shellcode

我正在编写Linux shell代码漏洞。我的目标 C 代码是:

 char code[] = "\xb0\x01\x31\xdb\xcd\x80";
 int main(int argc, char **argv)
 {
      int(*func)();
      func = (int (*)()) code;

      (Int)(*func)();
 }

为什么编译和运行此C程序会引发分段错误错误?该字符串是使用系统调用Int 0x80 /​​ EAX = 1退出程序的shell代码。汇编中的原始漏洞利用代码是:

b0 01                   mov    al,0x1
31 db                   xor    ebx,ebx
cd 80                   int    0x80

1 个答案:

答案 0 :(得分:1)

您没有设置eax=0x1,而是设置了al=0x1,所以如果您不知道在shellcode之前执行了哪些指令,那么您将拥有eax=xxxxxx01

正如评论所说,你必须在 shellcode 的开头做xor eax, eax