多线程中frida定位关键线程的方法
pthread_create
会先得到一个pthread_internal_t
结构体
最后会调用__pthread_internal_add
并将返回值赋给pthread_create
的第一个参数thread_out
__pthread_internal_add
会将传入的 pthread_internal_t
加入到g_thread_list
全局线程列表中,然后将传入的pthread_internal_t
返回,也就是pthread_internal_t
实际就等于pthread_t
,最后对应的就是pthread_create
的第一个参数。
pthread_internal_t
结构体的第三个字段就是创建线程对应线程idtid
,64位系统中对应的偏移就是0x10
使用frida
hook多线程程序的时候,如果不知道关键线程的start_routine
起始地址,但是可以获得关键线程的tid,如果这个时候需要定位到关键线程的调用pthread_create
的位置和start_routine
的话就可以hook pthread_create
并得到返回的tid,然后看是否是关键线程的tid。
var pthread_create_addr = Module.findExportByName("libc.so", "pthread_create");
Interceptor.attach(pthread_create_addr, {
onEnter:function(args){
pthread_arg0 = args[0]
pthread_arg2 = args[2]
},onLeave:function(){
try{
console.log("(tid : ", pthread_arg0.readPointer().add(0x10).readU32(), ")", "pthread_create : ", pthread_arg2.sub(libsgmainso_module));
}catch(e){
}
}
})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
2022-04-25 Zygote进程创建过程
2021-04-25 系统调用学习