如何找到正在运行的进程的平台

时间:2015-05-27 02:03:24

标签: c linux operating-system x86-64

我有一台x86_64计算机,它可以运行IA32进程,因为我安装了一个32位的库。现在我想知道正在运行的进程正在使用的平台是什么? 64位还是32位?

我可以访问该进程的唯一方法是ptrace系统调用;我没有可执行文件(就像我可以执行文件但我没有读写权限),所以我无法获得ELF标题。

我使用的操作系统是Ubuntu 14.04 LTS。

我不想获得可执行文件,然后分析ELF格式。 ONLY WAY 我可以访问此过程ptrace,或其他系统调用与ptrace相同,如果您知道,请告诉我。因为我想分析C程序中的过程。

2 个答案:

答案 0 :(得分:0)

尝试使用xocopy创建相关可执行文件的副本,并从创建的副本中转储ELF标头。

此工具和您描述的问题已经讨论elsewhere,该讨论也可能对您有所帮助。

答案 1 :(得分:0)

如果您可以查看/proc/<pid>/personality有关的PI​​D,我认为您想要的信息就在那里。对于64位进程,它是00000000,而对于32位进程,它是00400000。 (以及我在调试器中停止的32位的00440000。)

proc(5)手册页说它会告诉您personality(2)设置的个性。

内核来源:https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/personality.h

glibc的副本:https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sys/personality.h;hb=HEAD

我不确定发生了什么,但看起来正常运行的32位进程的唯一设置位是READ_IMPLIES_EXEC。所以也许个性并不是最好的方式。 64位代码可以设置。

此问题也在https://unix.stackexchange.com/questions/106234/determine-if-a-specific-process-is-32-or-64-bit上提出,除了在以各种方式访问​​ELF标题后检查ELF标题之外,检测方法的成功/可行性有限。但是,查看64位地址的/proc/<pid>/maps看起来是可行的。