我有一台x86_64
计算机,它可以运行IA32
进程,因为我安装了一个32位的库。现在我想知道正在运行的进程正在使用的平台是什么? 64位还是32位?
我可以访问该进程的唯一方法是ptrace
系统调用;我没有可执行文件(就像我可以执行文件但我没有读写权限),所以我无法获得ELF标题。
我使用的操作系统是Ubuntu 14.04 LTS。
我不想获得可执行文件,然后分析ELF格式。 ONLY WAY 我可以访问此过程ptrace
,或其他系统调用与ptrace
相同,如果您知道,请告诉我。因为我想分析C程序中的过程。
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您可以查看/proc/<pid>/personality
有关的PID,我认为您想要的信息就在那里。对于64位进程,它是00000000
,而对于32位进程,它是00400000
。 (以及我在调试器中停止的32位的00440000
。)
proc(5)
手册页说它会告诉您personality(2)
设置的个性。
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
看起来是可行的。