我正在查看这个示例 wrt 在堆栈中执行代码:
#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。堆栈内存是只读的。我的理解正确吗?