多线程中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

使用fridahook多线程程序的时候,如果不知道关键线程的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){
        }
    }
})
posted @   怎么可以吃突突  阅读(698)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
历史上的今天:
2022-04-25 Zygote进程创建过程
2021-04-25 系统调用学习
点击右上角即可分享
微信分享提示
主题色彩