[问题] ptrace 扫描其他 process 的内存?

楼主: applecool (noOneKnows)   2014-03-30 17:29:09
※ [本文转录自 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
作者: yvb   2014-03-31 12:56:00
请先试着查看使用 strace 程式, 并参考其原始码.建议先在 x86 linux 上试试看, 再换到 arm platform 测试.曾遇过在arm和mips上strace无法正确追踪的版本,换版本就好了.但未进一步研究那些版本出问题的原因.
楼主: applecool (noOneKnows)   2014-03-31 13:10:00
感激不尽阿!!!我先试看看 strace
作者: yvb   2014-03-31 16:06:00
啊, sorry, 没说清楚; strace是回第3点, 和问题 1, 2 无关.至于第 2 点, 可能要去参考 gdb 了.而第 1 点, 应该不限定 parent, 不然gdb和strace就不 work 了.
作者: buganini (霸格尼尼)   2014-04-14 20:27:00
没在android用过,不过ptrace,非root只能attach childroot则不限,1看起来还是非root的感觉
作者: yvb   2014-04-15 13:16:00
楼上所述的情况, 查了一下, 在较新的 Linux kernel (3.4 以后)可透过 /proc/sys/kernel/yama/ptrace_scope 来设定,默认值 1 表示限 root 和 parent, 改为 0 则相同 uid 亦可;而较旧的 kernel (3.3 以前) 无此设定值, root 或同 uid 即可.
楼主: applecool (noOneKnows)   2014-04-17 14:25:00
感谢不尽~~~不过我有 root

Links booklink

Contact Us: admin [ a t ] ucptt.com