[問題] x64 環境下的行程虛擬記憶體位置

看板C_and_CPP (C/C++)作者 (一直飛)時間6年前 (2019/07/05 07:48), 6年前編輯推噓3(308)
留言11則, 6人參與, 6年前最新討論串1/1
肥宅我最近試著寫些 debugger 的程式 但遇到些問題, 網路上常說程式的起始點位置是 0x8048xxx 但我利用 gdb 或者是 ptrace 會發現是個更大的數字 (e.g. 0x7f1baa1e8090) Q1: 是因為處理器的差距嗎? 考量當時的環境主流應該是 x86 32 bits的版本 (我是 64 bits 的版本) Q2: 我該如何得知子行程的 .text 或者 .plt 的位置? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.251.222.46 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1562284094.A.F32.html

07/05 09:27, 6年前 , 1F
開gdb然後下info files看看?
07/05 09:27, 1F

07/05 10:01, 6年前 , 2F
0x8048通常是32位元架構下的地址
07/05 10:01, 2F

07/05 10:03, 6年前 , 3F
子行程是child?
07/05 10:03, 3F

07/05 10:26, 6年前 , 4F
因為有 ASLR 吧
07/05 10:26, 4F

07/05 10:52, 6年前 , 5F
ASLR的位偏沒那麼大 應該是還有開PIE才對
07/05 10:52, 5F

07/05 14:37, 6年前 , 6F
0x80xxxxx 通常是 32bit 沒有 pie
07/05 14:37, 6F

07/05 14:38, 6年前 , 7F
0x7fxxxxxxxxxx 通常會是 __libc_start_main 的位址
07/05 14:38, 7F

07/05 15:07, 6年前 , 8F

07/05 15:07, 6年前 , 9F
看來我一直誤會 ASLR 了
07/05 15:07, 9F

07/05 15:16, 6年前 , 10F
你看到的是libc start man或是stack吧
07/05 15:16, 10F
抱歉剛剛才下班 我大致了解了數字會那麼大的原因 那我有辦法利用 pid 去得到我的 Q2 嗎? 我是有查到 /proc/$pid/maps 不過想問的是C語言有提供相關的API嗎? ※ 編輯: flypaper (111.251.222.46 臺灣), 07/05/2019 20:53:11

07/05 21:18, 6年前 , 11F
沒有,乖乖用 /proc/<pid>/maps 看吧。
07/05 21:18, 11F
文章代碼(AID): #1T7f0-yo (C_and_CPP)
文章代碼(AID): #1T7f0-yo (C_and_CPP)