我看这个例子w.r.t在堆栈中执行代码:理解在执行堆栈的C代码(苹果黑客手册代码)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char shellcode[] = “\xeb\xfe”;
int main(int argc, char *argv[]){
void (*f)();
char x[4];
memcpy(x, shellcode, sizeof(shellcode));
f = (void (*)()) x;
f();
}
这将导致一个分段错误。我的理解是因为shellcode的剩余字节内存不足,因为x只有4个字节的大小。这导致创建复制到堆栈内存的写入操作,并导致seg。由于堆栈内存是只读的故障。 我的理解是否正确?
堆栈不是只读的,但很可能不可执行。 – 2012-02-05 00:21:48
只有3个字节可以复制。 '\ x'表示接下来的两个字符表示实际放入程序的字节的十六进制值。 – ughoavgfhw 2012-02-05 00:23:10