我看這個例子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