[問題] ptrace 掃描其他 process 的記憶體?

看板LinuxDev作者 (noOneKnows)時間11年前 (2014/03/30 17:29), 11年前編輯推噓3(3012)
留言15則, 3人參與, 最新討論串1/1
※ [本文轉錄自 C_and_CPP 看板 #1JDeIuFt ] C/C++ by GCC 4.8, Android NDK + SL4A / Python for Android, Android 4.3 root 權限,ARM 架構 問題: 使用 ptrace 來掃描其他 process 的記憶體 遇到了很多困難,google 不到請高手幫忙解答,感激不盡 使用方式: 用 Python 呼叫由 C/C++ 編譯出的 so 或執行檔 (因為 member 比較熟 C) 描述: 1. 寫 ptrace 的程式如果包裝成 so 來給人 call, 所有的 processes 都 attach 不到... 如果寫成執行檔,用 python 打開執行也不行 但該執行檔直接用 adb shell 進去 run 就可以 attach 部分 processes 但有一部分 processes 還是 attach 不到... 請問該如何 attach 所有 processes 呢? 還有我推測 ptrace 必須在 parent process 執行 C or Python 怎麼新建一個 "parent" process 呢? 2. mem 讀進來 的記憶體量常常會少 4K bytes (read() 回傳值), 不然就是讀不到,但有 attach 到且讀出記憶體的都是正確結果 因為多次讀取也不行,為何會少 4K,如何避免? 有的記憶體區段讀不到該怎辦? (都是從 maps 抓出的可讀區) 3. ptrace 只能抓到 process 的單一 thread,請問對付 multi-threading 的程式怎麼抓比較好? maps 檔要如何分析較有效率? 希望高手指點迷津,感恩不盡。 ※ 編輯: applecool (123.110.252.159), 03/30/2014 11:24:35 ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: applecool (123.110.252.159), 03/30/2014 17:29:09

03/31 12:56, , 1F
請先試著查看使用 strace 程式, 並參考其原始碼.
03/31 12:56, 1F

03/31 12:58, , 2F
建議先在 x86 linux 上試試看, 再換到 arm platform 測試.
03/31 12:58, 2F

03/31 12:59, , 3F
曾遇過在arm和mips上strace無法正確追蹤的版本,換版本就好了.
03/31 12:59, 3F

03/31 13:01, , 4F
但未進一步研究那些版本出問題的原因.
03/31 13:01, 4F

03/31 13:10, , 5F
感激不盡阿!!!我先試看看 strace
03/31 13:10, 5F

03/31 16:06, , 6F
啊, sorry, 沒說清楚; strace是回第3點, 和問題 1, 2 無關.
03/31 16:06, 6F

03/31 16:07, , 7F
至於第 2 點, 可能要去參考 gdb 了.
03/31 16:07, 7F

03/31 16:13, , 8F
而第 1 點, 應該不限定 parent, 不然gdb和strace就不 work 了.
03/31 16:13, 8F

04/14 20:27, , 9F
沒在android用過,不過ptrace,非root只能attach child
04/14 20:27, 9F

04/14 20:28, , 10F
root則不限,1看起來還是非root的感覺
04/14 20:28, 10F

04/15 13:16, , 11F
樓上所述的情況, 查了一下, 在較新的 Linux kernel (3.4 以後)
04/15 13:16, 11F

04/15 13:17, , 12F
可透過 /proc/sys/kernel/yama/ptrace_scope 來設定,
04/15 13:17, 12F

04/15 13:20, , 13F
預設值 1 表示限 root 和 parent, 改為 0 則相同 uid 亦可;
04/15 13:20, 13F

04/15 13:21, , 14F
而較舊的 kernel (3.3 以前) 無此設定值, root 或同 uid 即可.
04/15 13:21, 14F

04/17 14:25, , 15F
感謝不盡~~~不過我有 root
04/17 14:25, 15F
文章代碼(AID): #1JD-Fd0i (LinuxDev)
文章代碼(AID): #1JD-Fd0i (LinuxDev)