能力值:
( LV2,RANK:10 )
|
-
-
2 楼
用RTTI吧?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
古歌了下...似乎您就是正解! 非常感谢阿!!
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
ida分析so不太懂,瞎说的,分析pe好像是用flirt来匹配的,命名也不太清楚,名字修饰各个编译器的实现不太相同。好像,ida在分析pe时不会用到rtti的。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我也还没查清楚,先说出我目前的认知与疑惑:
认知:
1.每个编译器,rtti的实现不尽相同.
2.因此ida要先识别编译器,并且ida要了解此编译器rtti的实现方法,才能够利用rtti识别函数名.
疑惑:
1.编译器很多种,ida真能够每一个都识别出?
2.ida是否依靠其他方式来识别函数名?
option,谢谢你给我方向!
|
能力值:
( LV12,RANK:210 )
|
-
-
6 楼
IDA自带的FLIRT签名只包含若干种较为固定的编译器,例如微软的VC系列,宝蓝BCB系列等。开源的编译器,比如GCC,Clang等,由于变种太多,每个操作系统构建的都可能不一样,IDA自带的签名并不包含。这部分编译器,需要自己用IDA提供的签名创建工具去创建FLIRT签名。而且,自带的签名,通常是一些编译器的CRT运行库,像cocos2d这种开源的库,不会自带。除非你自己创建的,否则肯定不会有。
从你的情况看,不太可能是通过RTTI实现的,最大的可能是,你的so文件带了调试符号。Release版带调试符号并不是奇怪的事情,因为一旦出现Bug,还要靠符号来定位错误位置的。尤其是像cocos2d这种开源的东西,更加没有隐藏源代码信息的必要。符号有可能嵌在可执行文件里面,也可能是独立的文件。这里,看上去是嵌在so里面的。所以,IDA直接解析so里的调试符号得出了类名等符号信息。
要想确认,你可以用strip工具处理一下so,确保去掉调试符号,再看看IDA是否还能识别。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
thebutterfly, 你提供的资讯好多阿!! thank you! 不过一时消化不了QQ...我还太嫩
不过我有做个实验,strip前的so,使用readelf输出的结果 和 strip后的结果完全一样..!
cocos2d::CCTouchDispatcher::touches函数 依然可以在dynsym段 找到
我目前的猜测是: touches函数设计成供其他程式调用 因此不能被strip
|
|
|