我正在通过this tutorial工作,但它是为32位处理器编写的。我在64 bit linux syscall找到了这个说明。我可以编译,运行和objdump它。
我的问题是,为什么以下代码会产生分段错误。
/* shellcodetest.c */
char code[] = "\x48\x31\xc0\xb0\x3c\x48\x31\xff\x0f\x05";
int main(int argc, char **argv){
int (*func)();
func = (int (*)()) code;
(int)(*func)();
}
/*
exitt: file format elf64-x86-64
Disassembly of section .text:
0000000000400078 <_start>:
400078: 48 31 c0 xor %rax,%rax
40007b: b0 3c mov $0x3c,%al
40007d: 48 31 ff xor %rdi,%rdi
400080: 0f 05 syscall
*/
供参考系统调用60(\ x3c)是exit()。所以这应该只是调用exit(0);