C_and_CPP 板


LINE

最近被問說 為什麼use after free後 你使用那塊memory的話 "有可能"會crash 或是 不會 我答不出來(這邊不討論 delete後 值被改動 foo->ptr已經變成垃圾指標 造成的acces s violation) 原因是 如果只是單純access 不管是read write, 我都不覺得會crash.... 以下是我 的測試和認知 https://ideone.com/HKYiIQ int* ptr = new int; *ptr = 123; cout << "before: " << ptr << ":" << *ptr << endl; (1) delete ptr; cout << "read after free: " << ptr << ":" << *ptr << endl; (2) *ptr = 456; // write after free cout << "read after free: "<< ptr << ":" << *ptr << endl; (3) 我的認知 new會透過cstdlib malloc要一塊 valid的user space address (他應該會跟OS要超過我d emand的) 然而我delete了 除了cstdlib裡面free做了一些事情外 , 他很可能也會跟OS講說我這塊 memory已經沒有要使用了(這邊不確定是不是每次 這是不是造成下面行為差異的主因) 再來我連續的 對這塊記憶體做讀取 和 寫入 1. 如果只是讀取而已 有沒有可能 造成crash? (以我測試來說 從沒因為read 而cras h, 但如果真的有可能會 我想知道為什麼) 2. 寫入比較不理解, 我拿到的是user space address, 雖然我delete了 但我write的時 候並沒有寫在其他超出user space的記憶體或是read-only的區段 為什麼 "有機會" 造成 SIGSEGV? 到底是誰 raise這signal? 3. 上面程式碼 (2) "有時候"會印出*ptr = 0,有時候是原來數值, 雖然我也只知道值不 可預期, 但我想問的是, 到底是誰把0 寫入進去? 是cstdlib嗎? 如果是的話 照理講要每 次都變0, 但顯然不是每次 以我測試, 如果我掛上valgrind ./a.out ==> 這行就不會變0 維持原來數值, 一旦直 接./a.out 就會是0 以上到底是誰介入了? 這件事我想說很可能是-O之類的差異 但我發現似乎不是 deb ug / release build都有這種現象. 然而有時候這一行就直接SIGSEGV了如同2.所問的問題 4. 我有用signal handler 擷取這SIGSEVG 我天真的想要把這件事給吃下來 但我看文章說 signal handler return後會回到 原本執行到的code 以我測試來說 我會 無限迴圈的觸發SIGSEGV , 想問一下是不是不可能吃得下來 一 定要 abort或是把handler設定成default 讓系統自己handle 5. 補個問題我嘗試在ubuntu產生core dump 大概做了幾件事 echo 'core_%e.%p' | sudo tee /proc/sys/kernel/core_pattern core_%e.%p ulimit -c unlimited gdb a.out --core=core_a.out.1234 想問說~ 難道一定要user自己在電腦想辦法開core dump的能力而無法透過自己applica tion 本身"暫時" 開啟嗎? 找不太到文章 以上雖然可以用undefined behavior來解釋 可是如果想知道更深入的概念 該怎麼做 謝謝 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.247.71.99
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1530680216.A.20F.html
1F:推 Sidney0503: 違建拆除率低於50% 地震不是每個違建都會倒07/04 12:59
※ 編輯: lovejomi (27.247.71.99), 07/04/2018 13:18:56
2F:→ yvb: (1) int* ptr = new int[65536]; 之類, new 較大空間看看. 07/04 13:47
3F:→ L4ys: malloc 是一次跟 kernel 要一大塊來慢慢切給你用, free 掉 07/04 14:16
4F:→ L4ys: 之後不會馬上還給 kernel, 寫了會 segfault 是因為 07/04 14:17
5F:→ L4ys: freed chunk 上會存放一些資訊 07/04 14:18
6F:→ L4ys: 另外如果 allocate size 超過 MMAP_THRESHOLD 則會改用 mmap 07/04 14:19
7F:→ L4ys: /munmap, 這種 case 的 uaf 去讀取可能就會 segfault 07/04 14:21
8F:→ L4ys: 想知道更深入的可以去看 malloc.c 07/04 14:21
9F:噓 F04E: ........ 07/04 18:29
10F:→ lovejomi: 為什麼說使用mmap拿到的就肯定會sigsegv呢 07/04 19:01
11F:→ yvb: 你可以用 strace 去觀察看看.mmap來的,free/delete時就還了. 07/04 19:32
12F:推 b0920075: 哇是l4ys大大 07/05 09:48
13F:→ b0920075: 還給kernel就相當於這塊memory不存在,你去訪問這地址當 07/05 09:48
14F:→ b0920075: 然會crash 07/05 09:48







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP