首页
社区
课程
招聘
未解决 [求助]学习 Android 过程中的一些疑惑 50.00雪花
发表于: 2024-3-7 04:21 1870

未解决 [求助]学习 Android 过程中的一些疑惑 50.00雪花

2024-3-7 04:21
1870

以前都是钻研Windows的,现在在Android属于初学者。在学习动态调试的时候碰上一些疑惑,找了很多书籍(包括网上搜索)都没有解惑,可能是思想已经被Windows禁锢了!希望可以指导一下:

(前提:被调试的App,是一个简单的示例(测试用)App,它没有任何的反编译或者反调试的保护手段)

我使用 IDA 和 JEB 进行动态调试时,对这个【线程】比较困惑。

疑问1:比如Name为 JDWP 的线程,是属于"虚拟机自身"的调试线程,而 RenderThread 也是属于 "虚拟机自身" 的渲染线程。问:线程的 Name 是如何决定的? 如果 APP 创建了一个线程,如何区分哪些线程是属于 "虚拟机自身",哪些线程是 APP 额外创建的?还是说,APP创建的线程,在调试器中不会"体现"出来?

疑问2: IDA Attach Process 后,在 Threads 一框里,没有发现这个APP的 "主线程",经对比线程名称,全是 "虚拟机自身" 的线程。执行APP 代码的线程到底是哪个?

疑问3: 在windows系统中,线程是有 "启动地址" 的,即这个线程从哪里开始执行,Android虚拟机中的线程是否没有这个概念?还是说,就它的调试机制来说,根本不需要?

疑问4:在windows系统中,如果中断到调试器,是可以查得到各个线程 "当前的位置" 的,Android虚拟机中的线程,是否也是没有这个概念的?

还有,在 IDA - Threads 中,双击某个线程,出现 Command "SelectThread(xxxx)" faild - registers are not available 是什么原因?

初学Android,还请指导!


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 3059
活跃值: (30876)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
首先问一下要调试的是java层的还是native层,能够顺利调试,以下的回答是基于文中的问题解答的
1.线程没有显式设置,就是默认或固定的命名,做调试是根据log日志打印线程ID和进程ID来判断,线程ID跟APP的主线程ID相同,很可能是APP的主线程或其创建的其他工作线程
2.借助logcat等工具监控日志,看是否有线程创建或异常信息
3.不需要直接关心线程的具体内存启动地址
4.使用调试器可以查看每个线程的状态,包括当前位置(调用堆栈)、寄存器内容
5.可能的原因是选中的线程可能在那一刻没有运行,因此它的寄存器状态不可用
2024-3-8 15:02
0
雪    币: 36
活跃值: (212)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
怎么现在网上的回答全是 AI 了 ?
2024-3-9 20:07
0
游客
登录 | 注册 方可回帖
返回
//