在 QNX 中检索自身进程的内存映射
Retrieving the memory map of its own process in QNX
在 Linux 如果我们看 /proc/self/maps:
00400000-004ef000 r-xp 00000000 08:01 12845058 /bin/bash
006ef000-006f0000 r--p 000ef000 08:01 12845058 /bin/bash
006f0000-006f9000 rw-p 000f0000 08:01 12845058 /bin/bash
006f9000-006ff000 rw-p 00000000 00:00 0
00d5a000-010a2000 rw-p 00000000 00:00 0 [heap]
7f6fe582a000-7f6fe5835000 r-xp 00000000 08:01 1048595 /lib/x86_64-linux-gnu/libnss_files-2.19.so
7f6fe5835000-7f6fe5a34000 ---p 0000b000 08:01 1048595 /lib/x86_64-linux-gnu/libnss_files-2.19.so
7f6fe5a34000-7f6fe5a35000 r--p 0000a000 08:01 1048595 /lib/x86_64-linux-gnu/libnss_files-2.19.so
7f6fe5a35000-7f6fe5a36000 rw-p 0000b000 08:01 1048595 /lib/x86_64-linux-gnu/libnss_files-2.19.so
我需要 Qnx 的路径名和起始地址等信息。我怎样才能得到这些信息?
我的分析说 Qnx 中没有 /proc/self/maps 文件。
我们在QNX中也有自己的文件!!
地址 space 由 /proc 中每个文件夹中名为 "as" 的二进制文件表示。 /proc/self/as包含当前进程的地址space。
问题是它不是人类直接可读的。您需要使用 devctl() 来读取它。以下是关于地址 space 解码的所有 devctl 命令的 link。
示例 -
devctl("/proc/self/as",DCMD_PROC_TIDSTATUS,&debug_data,sizeof(debug_data)
此命令将以 struct _debug_thread_info 结构为您提供线程的调试数据。
类似地,DCMD_PROC_PAGEDATA和DCMD_PROC_MAPINFO可以用来获取分段映射(在linuxmaps文件中做这个)信息进程的地址 space.
希望对您有所帮助。
尝试使用这个:
pidin -p<process> mapinfo
在 Linux 如果我们看 /proc/self/maps:
00400000-004ef000 r-xp 00000000 08:01 12845058 /bin/bash
006ef000-006f0000 r--p 000ef000 08:01 12845058 /bin/bash
006f0000-006f9000 rw-p 000f0000 08:01 12845058 /bin/bash
006f9000-006ff000 rw-p 00000000 00:00 0
00d5a000-010a2000 rw-p 00000000 00:00 0 [heap]
7f6fe582a000-7f6fe5835000 r-xp 00000000 08:01 1048595 /lib/x86_64-linux-gnu/libnss_files-2.19.so
7f6fe5835000-7f6fe5a34000 ---p 0000b000 08:01 1048595 /lib/x86_64-linux-gnu/libnss_files-2.19.so
7f6fe5a34000-7f6fe5a35000 r--p 0000a000 08:01 1048595 /lib/x86_64-linux-gnu/libnss_files-2.19.so
7f6fe5a35000-7f6fe5a36000 rw-p 0000b000 08:01 1048595 /lib/x86_64-linux-gnu/libnss_files-2.19.so
我需要 Qnx 的路径名和起始地址等信息。我怎样才能得到这些信息?
我的分析说 Qnx 中没有 /proc/self/maps 文件。
我们在QNX中也有自己的文件!!
地址 space 由 /proc 中每个文件夹中名为 "as" 的二进制文件表示。 /proc/self/as包含当前进程的地址space。
问题是它不是人类直接可读的。您需要使用 devctl() 来读取它。以下是关于地址 space 解码的所有 devctl 命令的 link。
示例 - devctl("/proc/self/as",DCMD_PROC_TIDSTATUS,&debug_data,sizeof(debug_data)
此命令将以 struct _debug_thread_info 结构为您提供线程的调试数据。
类似地,DCMD_PROC_PAGEDATA和DCMD_PROC_MAPINFO可以用来获取分段映射(在linuxmaps文件中做这个)信息进程的地址 space.
希望对您有所帮助。
尝试使用这个:
pidin -p<process> mapinfo