在 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。

http://www.qnx.com/developers/docs/6.5.0_sp1/index.jsp?topic=%2Fcom.qnx.doc.neutrino_cookbook%2Fs3_procfs.html

示例 - 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