首页
论坛
课程
招聘
[.NET平台] [盗版]发一个.net用的识别符号文件的库
2009-7-12 23:46 6626

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

2009-7-12 23:46
6626
发一个.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可否识别...

看雪论坛2020激励机制:能力值、活跃值和雪币体系!会员积分、权限和会员发帖、回帖活跃程度关联!

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