2015-05-27 30 views
1

的平臺,我有一個x86_64機,因爲我已經安裝了32位的庫就可以運行IA32過程。現在我想知道正在運行的進程正在使用的平臺是什麼? 64位或32位?如何找到一個正在運行的進程

我可以訪問該進程的唯一方法是ptrace系統調用;我沒有可執行文件(就像我只能執行文件,但我沒有讀寫權限),所以我無法獲得ELF標頭。

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

我不想獲取可執行文件,然後分析ELF格式。 唯一的方法我可以訪問的過程是ptrace,或其他系統調用相同ptrace如果你知道,請告訴我。因爲我想分析一個C程序中的進程。

+0

'ldd'是否有效? (它實際上執行文件,有一些隱藏的選項) –

+0

@BenVoigt nop,實際上它是一個正在運行的進程。我通過'ptrace'附加它。 – litao3rd

+0

你有權訪問lsof嗎? – tink

回答

0

嘗試使用xocopy創建有問題的可執行文件的副本,並從轉儲創建副本ELF頭。

這個工具,你所描述的問題進行了討論elsewhere和討論可能有助於你。

+0

感謝您的回覆。我所做的工作與'xocopy'部分相同。我不想獲取可執行文件。我只想通過'ptrace'系統調用來分析該進程正在使用的平臺。 – litao3rd

+0

@ litao3rd:'xocopy'的C源代碼以編程方式定位,然後使用'ptrace'讀取ELF頭 - 這似乎滿足您從C程序執行此分析的需求(GPL應用)。 – deaks

+0

是的,我讀了'xocopy'的源碼,它通過在內存中搜索ELF頭來工作。但這不是我想要的。再次感謝您的回覆。 :P – litao3rd

0

如果你可以看看/proc/<pid>/personality的PID的問題,我想你想要的信息是存在的。對於64位進程,這是00000000,但對於32位進程,這是00400000。 (而00440000爲32位,我停在調試器中。)

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。所以也許性格不是最好的選擇。 64bit代碼可以設置

這也要求在https://unix.stackexchange.com/questions/106234/determine-if-a-specific-process-is-32-or-64-bit,與比讓他們以各種方式後檢查ELF首部的檢測方法有限的成功/生存能力。不過,查看/proc/<pid>/maps的64位地址看起來可行。

相關問題