【发布时间】:2015-09-21 14:01:59
【问题描述】:
这是我的问题。我有一个用 C# 编写的 .exe 文件。我无权访问原始源代码或 pdb 文件。
我想在语句级别获取方法内部正在执行的内容的跟踪。我知道 C# 源代码会转换为 CIL 并在运行时进一步编译。
我发现 .NET 分析器提供由方法、返回值和参数值组成的执行跟踪。我找到的一些工具是:dotTrace、redgate ANTS、telerik justTrace、Runtime Flow。
我想跟踪每个语句的等效 CIL 命令。 我知道可以进行进一步的编译器优化,可以修改 CIL 代码或不同类型的编译托管代码 (short info)。
一种自动添加日志记录的方法是PostSharp,但又为我的情况提供了过于高级的视图。
据我所知,CLRProfiler 提供了用于方法入口和出口点等的 API 方法。没有 API 可以跟踪执行的语句。
到目前为止,我的想法是在 CIL 级别手动编写代码注入器,如此处所述(part-1 和 part-2),每个语句将打印等效的 CIL 代码。
有没有人有更好的想法或知道任何类似的工具? 对于二进制程序集,Intel Pin 可以提供类似的功能。
更新
我不想简单地阅读源代码,我想看看执行了什么。 我很了解所有反编译器。 我在混淆和反混淆的背景下这样做。 例如,如果我有一个计算斐波那契数的方法,并且在该方法上应用了控制流混淆和其他混淆方法,那么仅仅阅读源代码是不够的。我想看看该方法是如何执行的。
我需要动态追踪。
【问题讨论】:
-
为什么不使用反编译器?
-
这篇尖锐的文章看起来很有趣
-
@Nasreddine 请阅读更新后的问题。谢谢提问
-
dotPeek 允许您导出 pdb 文件,您应该可以使用该文件来逐步执行。
标签: c# .net reverse-engineering managed cil