我尝试运行本教程中描述的第二个示例(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代码时,它只会打印任何内容。
有人能解释我为什么会这样吗?