看板 C_and_CPP 關於我們 聯絡資訊
#include <stdio.h> char shellcode[] = "\xb0\x01\x31\xdb\xcd\x80"; typedef void (*FUNCPTR)(); int main() { printf("<< Shellcode 開始執行 >>\n"); FUNCPTR fp = (FUNCPTR)shellcode; fp(); } 運作環境是Ubuntu 12.10 想說先弄一個最簡單的範例 , 只有exit的功能 但執行時一直出現記憶體區段錯誤 不知道是什麼原因 上網查了一下 利用gcc編譯時也加上了-z execstack 還是一樣 請問有人知道原因嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.218.6.70
legnaleurc:DEP, OS或CPU可以禁止執行 code sec 以外的 op code 11/18 23:28
legnaleurc:先用 memalign 要一段 page 再用 mprotect 改權限即可 11/18 23:29
cobrasgo:我猜應該是你用的shell的問題,找舊一點的shell 11/19 00:56
UNARYvvv:如果懶得使用動態配置 + 改 page 屬性,可以在 11/19 02:25
UNARYvvv:char shellcode[] 和 = 之間加上這個 11/19 02:26
UNARYvvv:__attribute__ ((section (".text#"))) 11/19 02:27
UNARYvvv:指定把這陣列放到 .text section,而那一般預設就是你其 11/19 02:28
UNARYvvv:他可執行程式所放置的 section,編出執行檔後可用 nm觀察 11/19 02:29
akasan:gcc 再加個 -m32 看看? 11/19 10:24
※ 編輯: a613204 (1.171.202.205), 07/28/2014 19:04:18