Shellcode以seg错误结束

时间:2015-10-26 08:36:22

标签: c assembly shellcode

我尝试运行本教程中描述的第二个示例(print'hello'): http://www.vividmachines.com/shellcode/shellcode.html

这是我的C代码:

#include <unistd.h>
#include <sys/mman.h>
#include <string.h>

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";

int main() {
    void *buf;
    buf = mmap (0,sizeof(code),PROT_READ|PROT_WRITE|PROT_EXEC,
                MAP_PRIVATE|MAP_ANON,-1,0);
    memcpy (buf, code, sizeof(code));
    int (*func)() = (int (*)()) buf;
    func ();
    return 0;
}

开头的代码变量是程序集文件的代码:

[SECTION .text]

global _start

_start:
    mov eax, 4
    mov ebx, 1
    mov ecx, msg
    mov dl, 5
    int 0x80

    mov eax, 1
    mov ebx, 0
    int 0x80

msg:    db 'hello'

当我编译并运行asm文件时,它运行良好(打印'hello')。 但是当我编译并运行上面的C代码时,它只会打印任何内容。

有人能解释我为什么会这样吗?

0 个答案:

没有答案