作者flypaper (一直飞)
看板C_and_CPP
标题[问题] x64 环境下的行程虚拟记忆体位置
时间Fri Jul 5 07:48:10 2019
肥宅我最近试着写些 debugger 的程式
但遇到些问题, 网路上常说程式的起始点位置是 0x8048xxx
但我利用 gdb 或者是 ptrace 会发现是个更大的数字 (e.g. 0x7f1baa1e8090)
Q1: 是因为处理器的差距吗?
考量当时的环境主流应该是 x86 32 bits的版本 (我是 64 bits 的版本)
Q2: 我该如何得知子行程的 .text 或者 .plt 的位置?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.251.222.46 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1562284094.A.F32.html
1F:→ sarafciel: 开gdb然後下info files看看? 07/05 09:27
2F:推 b0920075: 0x8048通常是32位元架构下的地址 07/05 10:01
3F:推 b0920075: 子行程是child? 07/05 10:03
4F:→ Lipraxde: 因为有 ASLR 吧 07/05 10:26
5F:→ sarafciel: ASLR的位偏没那麽大 应该是还有开PIE才对 07/05 10:52
6F:→ CP64: 0x80xxxxx 通常是 32bit 没有 pie 07/05 14:37
7F:→ CP64: 0x7fxxxxxxxxxx 通常会是 __libc_start_main 的位址 07/05 14:38
9F:→ Lipraxde: 看来我一直误会 ASLR 了 07/05 15:07
10F:推 Astar5566: 你看到的是libc start man或是stack吧 07/05 15:16
抱歉刚刚才下班 我大致了解了数字会那麽大的原因
那我有办法利用 pid 去得到我的 Q2 吗?
我是有查到 /proc/$pid/maps 不过想问的是C语言有提供相关的API吗?
※ 编辑: flypaper (111.251.222.46 台湾), 07/05/2019 20:53:11
11F:→ tinlans: 没有,乖乖用 /proc/<pid>/maps 看吧。 07/05 21:18