这是我的问题。我有一个用C#编写的.exe文件。我没有访问原始源代码或pdb文件的权限。
我想在语句级别获得方法内部执行的内容的跟踪。我知道C#源代码被转换为CIL,并在运行时进行进一步编译。
我发现了.NET评测器,它提供由方法、返回值和参数值组成的执行跟踪。我发现了一些工具:dotTrace,redgateANTS,telerikjustTrace,RuntimeFlow。
我想得到每个语句对应的CIL命令的踪迹。我知道可以有进一步的编译器优化,可以修改CIL代码或不同类型的编译托管代码(简短信息(。
自动添加日志记录的一种方法是PostSharp,但对于我的情况来说,它再次提供了一个过于高级的视图。
据我所知,CLRProfiler为方法入口和出口点等提供了API方法。没有API来跟踪执行的语句。
到目前为止,我的想法是在CIL级别手动编写一个代码注入器,如本文所述(第1部分和第2部分(,它将为每个语句打印等效的CIL代码。
有人有更好的想法或知道任何类似的工具吗?对于二进制程序集,Intel Pin可以提供类似的功能。
更新
我不想简单地阅读源代码,我想看看执行了什么。我很清楚所有的反编译器。我这样做是在模糊和去模糊的背景下。例如,如果我有一个计算fibonnacci数的方法,并在该方法上应用控制流模糊处理和其他模糊处理方法,那么仅仅阅读源代码是不够的。我想看看这个方法是如何执行的。
我需要动态跟踪。
如果你只是想进行逆向工程,你最好使用像dotPeek这样的东西,它可以将IL转换为人类可读的C#。
如果可执行文件被混淆了,那么分析和反编译无论如何都不会对你有多大帮助。
对于你的方法,你只需要反编译应用程序[使用一些反编译器,如telerik、ILOgic、dotpeek e.t.c],然后对你想要检查的方法进行一些跟踪。[可以使用log4net或简单的bulilitin trace]。已经做了很多次这些类型的事情
ILDASM.exe可以为您提供很多您想要的东西。它与VS打包。