首页
社区
课程
招聘
未解决 [求助] frida要怎么打印native层的一个函数调用的所有函数地址? 50.00雪花
发表于: 2021-11-14 20:55 12385

未解决 [求助] frida要怎么打印native层的一个函数调用的所有函数地址? 50.00雪花

2021-11-14 20:55
12385

比如我跟踪一个算法从java层跟踪到了一个so的普通函数地址. 我要怎么打印出来这个函数接下来都调用了哪些函数?

优先打印函数地址,当然要是能打印参数,返回值等相关信息就更好了.


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 3710
活跃值: (2669)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
2
先用IDA分析so函数,再用frida hook函数里的子函数来分析吧
2021-11-15 00:59
0
雪    币: 161
活跃值: (797)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
yegu 先用IDA分析so函数,再用frida hook函数里的子函数来分析吧
就是因为挨个子函数分析麻烦,所以才要批量打印地址信息的
听人说frida有方法实现,不知道怎么实现~
2021-11-15 18:30
0
雪    币: 156
活跃值: (3801)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
trace native?
2021-11-16 11:33
0
雪    币: 161
活跃值: (797)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
TUGOhost trace native?
是的,不借助ida,去解析他的所有普通函数,frida本身不能解析so里的所有函数并进行hook吗
2021-11-16 13:49
0
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
“打印出来这个函数接下来都调用了哪些函数” 这个很难,除非你hook了所有函数。但是可以打印当前函数栈。
2021-11-16 16:34
0
雪    币: 161
活跃值: (797)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
mb_hgrbqfun “打印出来这个函数接下来都调用了哪些函数” 这个很难,除非你hook了所有函数。但是可以打印当前函数栈。
keystone或者capstone是否能打印呢,我记得其中一个可以在程序执行的时候打印汇编指令,根据汇编指令,可以识别这条指令是否是一条函数调用指令,如果是,就打印其地址
2021-11-17 16:58
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
threadroc keystone或者capstone是否能打印呢,我记得其中一个可以在程序执行的时候打印汇编指令,根据汇编指令,可以识别这条指令是否是一条函数调用指令,如果是,就打印其地址
我最近也有同样的需求,楼主你解决了么
2023-3-28 10:01
0
雪    币: 2989
活跃值: (2605)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9

你可以使用Frida来完成这个任务。下面是大致的步骤:

1、连接到目标进程,获取相关的Module和函数的地址。

var targetModuleBase = Module.findBaseAddress("target_module.so");
var targetFunctionAddress = Module.findExportByName("target_module.so", "target_function");

2、使用Interceptor来hook住目标函数,获取目标函数的参数,然后打印出来。在回调函数中,你可以继续使用Interceptor来hook住目标函数调用的其他函数,这样就可以追踪到它们的调用了。

Interceptor.attach(targetFunctionAddress, {
  onEnter: function(args) {
    // 打印目标函数的参数
    console.log("Target function arguments: ", args[0], args[1]);

    // hook住目标函数调用的其他函数
    var otherFunctionAddress = Module.findExportByName("target_module.so", "other_function");
    Interceptor.attach(otherFunctionAddress, {
      onEnter: function(args) {
        console.log("Other function arguments: ", args[0], args[1]);
      }
    });
  }
});


需要注意的是,对于一些有参数的函数,参数的类型可能会是结构体或指针等,需要根据具体情况进行处理。同样的,返回值的类型也需要根据实际情况进行解析。


2023-3-30 09:13
0
游客
登录 | 注册 方可回帖
返回
//