【发布时间】:2012-02-05 00:17:40
【问题描述】:
我正在查看这个示例 w.r.t 在堆栈中执行代码:
#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。堆栈内存是只读的。 我的理解正确吗?
【问题讨论】:
-
堆栈不是只读的,但很可能是不可执行的。
-
而且只有3个字节要复制。
\x表示接下来的两个字符表示实际放入程序中的字节的十六进制值。