首页
社区
课程
招聘
[求助]so未被调用前,怎么找到基地?
发表于: 2016-6-15 20:56 9574

[求助]so未被调用前,怎么找到基地?

2016-6-15 20:56
9574
小弟在ida6.5调试so前,遇到点难题,我想调用该so的 init函数,这个函数被某个按钮事件触发,并只会调用一次,也就是当调用这so时,这个init函数同时执行,那么我想调用该so话,要在还没被加载这个so前,下好断点,可是so没被加载前,Ctrl+s,是查看不到这个so的,也就是我也没法得知基址。
求前辈指点,网上找了些资料,都是这个so被加载过的,才能知道基址的。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 0
活跃值: (680)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
本来以为可以用
adb shell /proc/<pid>/maps
打印查看的,但还是不行,只要这个so没被加载过,就没有。咋办呢
2016-6-15 21:11
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
静态分析时下好断点,attach到进程后会自动识别对应的so文件和断点的
我记得是这样的
难到你是要在动态库加载前下断点吗
2016-6-15 22:27
0
雪    币: 0
活跃值: (680)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
如果java层,还没执行 System.loadLibrary("xxxx");
来加载xxxx.so话,那么ida附加进程,也是看不到这个xxx.so的。
当使用了loadLibrary函数,载入了这个xxx.so,才可以看到。
2016-6-15 22:36
0
雪    币: 0
活跃值: (680)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
晕了,为啥我提问的,都没人一个人回复呢
2016-6-15 23:40
0
雪    币: 163
活跃值: (1623)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
ida调试勾选上加载新模块通知事件
2016-6-16 09:29
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
╮(╯▽╰)╭其实这是一个很菜鸟的问题,可惜大神们都太忙了,现在是工作期间吧,╮(╯▽╰)╭看在都是菜鸟我来帮一下你吧,谁叫我是个空闲的菜鸟呢,嘿嘿!!啊嘿嘿
那个你需要对linker下断点,自行百度对init_array下断点吧,这个一堆一堆的文章,linker对so dlopen之后会填充soinfo这个结构体的,最后处理完毕so之后,会第一个执行so的init_array节的内容,你在他还没有运行init_array节之前下断点就行了
2016-6-16 11:35
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
8
IDA的Debugger options里面有个Suspend on library load/unload,在so加载前勾选上就行了。
至于前面说到的搞linker,更灵活一点,但是操作比价繁琐。
2016-6-16 11:49
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
哈哈谢谢大神指点,又多学了一招
2016-6-17 11:08
0
雪    币: 47
活跃值: (418)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
10
不知道这个so是不是你自己写的,要是自己写的,在so的init函数中加sleep,然后挂上gdb可以源码单步调试,要是别人的so就在ida中的Debugger options中弄
2016-6-18 00:06
0
雪    币: 0
活跃值: (680)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
怎么结贴呢,谢谢各位大大解答
2016-6-20 21:32
0
游客
登录 | 注册 方可回帖
返回
//