Android ARM 中线程和进程 ID 寄存器包含什么二进制值?

逆向工程 安卓 手臂
2021-06-18 10:27:52

我在 Android 共享库中有以下说明:

MRC p15, 0, R3,c13,c0, 3 
LDR R3, [R3,#4] 
MOV R0, #0 
STR R0, [R3,#0xC]

根据 ARM 文档:

读取或写入线程和进程 ID 寄存器对处理器状态或操作没有影响。这些寄存器提供操作系统支持并且必须由操作系统管理。

这很好,但是这个寄存器值在 Android 或 ARM Linux 中的实现是什么?

从代码中,它尝试将线程和进程 ID 寄存器值作为结构读取,并读取一些带有偏移量的字段4该字段是指向结构本身的指针,它写入0具有偏移量的字段12

所以,寄存器值肯定不是pthread_t,因为根据Android源代码,pthread_t偏移量为4的字段是unsigned int而不是指向任何结构的指针。

有谁知道我在哪里可以找到MRC c13::c0::3Android ARM 中返回的结构的定义

1个回答

以防万一其他人会遇到同样的问题,在阅读了大量 Android 源代码和实际应用程序内存转储后,我发现:

因此,此代码将缓存的 pid 值设置为0. 看起来需要强制getpid读取实际pid值而不是使用缓存的值(PID 缓存是某些glibc版本中已知的错误来源)。