shellcode分段错误虽然汇编效果很好

时间:2017-01-19 17:33:38

标签: c assembly x86 shellcode

我创建了一个汇编程序来执行shell:

    section .text
      global _start
    _start:
      xor    eax, eax
      push   eax
      push   0x68732f2f
      push   0x6e69622f
      mov    ebx, esp
      push   eax
      push   ebx
      mov    ecx, esp
      mov    al, 0xb
      int    0x80

因为我正在使用64位机器,所以我使用

编译并链接了程序
    nasm -f elf shellcode.asm
    ld -m elf_i386 shellcode.o -o shellcode

使用objdump生成shellcode。编译和链接的程序非常好。但问题是shellcode在这个C程序中不起作用:

    // shellcode.c
    #include <stdio.h>
    char shellcode[] =
    "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69"
     "\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80";


    int main()
    {
      fprintf(stdout ,"Length: %d\n", strlen(shellcode));
      (*(void(*)()) shellcode)();
      return 0;
    }

我知道在上面的shellcode数组中编写的shellcode可能是错误的,但事实并非如此。即使使用正确的shellcode,问题仍然存在。这是一个冲突问题,因为建筑?我不这么认为,因为该程序是为32位机器编译并成功链接的,我知道64位机器向后兼容32位机器。我尝试使用-fno-stack-protector -z execstack参数编译C程序并禁用ASLR但没有发生任何事情。

0 个答案:

没有答案