首页
社区
课程
招聘
[盗版]发一个.net用的识别符号文件的库
发表于: 2009-7-12 23:46 8638

[盗版]发一个.net用的识别符号文件的库

2009-7-12 23:46
8638

发一个.net用的识别符号文件的库

在网上找了几天,没有.net用的,全是C++。虽然作为C++/CLI可以编译,但在.net工程下什么类也识别不了,一大堆类型得改。
还记得Symbo lType Viewer吗?看看它的帮助文档里有什么:“The sources will be placed at the disposal at the final version… after a good cleaning”,至今发给作者的求码E-mail杳无音讯。

实在懒得自己写,就把SymbolTypeViewer.exe给逆了。经过这几天的加工,基本上把逻辑代码和界面代码分离,所有的报错修正(基本上是语法问题,恶心死我)。
功能的话用过这个工具的人都知道,还原函数、结构、枚举。格式化为C或者IDC。

为了弄清楚里面的类,花了一天时间看MSDN写代码。把Dbghelp里许多SymXx搞了一遍。才敢写这篇文章(感兴趣的同学还可以看一下DIA SDK)。
简单说明一下:

 
这个空间包括各种符号类型,当然符号文件里面还有其他一些信息比如源代码行这里没有,很遗憾。还有一个重要的信息是符号地址,包括地址成员的只有SymGeneral。
 

DbgService完成一些常规例程 比如SymInitialize,设置符号所在目录等。
ModuleSymbols是主角,与一个模块对应,比如一个exe,dll或者pdb文件。
ListSymbol很有用,它也是ModuleSymbols的一个成员,在ModuleSymbols中,它表示模块里所有的符号,包括好几个SortedList<uint, SymbolXx>,SymbolXx是不同的符号类型,也就是ListSymbol包括几个以类型分类的符号列表,还有一个所有符号列表,这些列表是私有的,喜欢效率的同学可以考虑把它们public。

还有一个重要的空间
 
这个空间是把符号们转换成C或者IDC用的,Highlight那三个类我忽略不计。
因为每个符号代表的信息有限,比如当我想要识别函数参数类型的时候,找到一个符号,它告诉我它是指针,什么指针呢?没有说,然后根据这个符号里的一个Id找到另一个符号,我靠它又是一个指针,那我继续找,哦它是个结构体。原来这个参数类型是个指向结构体的指针的指针。所以,我才有把这个命名空间也拿出来的动力,勤奋来源于懒惰。

ParserSymbol.Format_C.GetUdtFormat() 很好用,它把一个SymUdt打印出一个结构体,包括所有的元素在内,SymUdt类只有结构体的名字。FormatMemberToString()是把一个元素SymData格式化成C,比如“int32 size;”。类似的还有ParserSymbol.FunctionFormat. GetFunctionFormat()和ParserSymbol.EnumFormat.GetEnumFormat(),格式化整个函数和枚举。然后是格式化枚举的一个元素的FormatMemberToString()。

效果:

函数名有点怪,想显示正常些请改动程序主类除Main以外另一个的静态函数


如果用GetUdtFormat()效果会更佳


枚举


主程序类里加了点东西.详见示例程序和类库代码
工程用VS2008创建,不知2005可否识别...


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (7)
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
太强悍了。正需要这个!!谢谢!
2009-7-13 00:28
0
雪    币: 8179
活跃值: (3331)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
虽然不会用,先收藏着
2009-7-13 08:41
0
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
好东西,必顶
2009-7-13 08:45
0
雪    币: 149
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
" .net用的识别符号文件的库"  不了解呀!
2009-7-14 22:27
0
雪    币: 497
活跃值: (58)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
6
可理解成这个  .net程序用的识别符号文件的库
2009-7-15 05:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
下载学习一下。
2009-10-30 14:24
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
还是不明白这个怎么用? 我下载了, 不能运行。 请大侠们出来解释下!!!!不胜感激
2009-11-2 15:36
0
游客
登录 | 注册 方可回帖
返回
//