【问题标题】:How can I obtain execution trace of a C# application at statement level?如何在语句级别获取 C# 应用程序的执行跟踪?
【发布时间】:2015-09-21 14:01:59
【问题描述】:

这是我的问题。我有一个用 C# 编写的 .exe 文件。我无权访问原始源代码或 pdb 文件。

我想在语句级别获取方法内部正在执行的内容的跟踪。我知道 C# 源代码会转换为 CIL 并在运行时进一步编译。

我发现 .NET 分析器提供由方法、返回值和参数值组成的执行跟踪。我找到的一些工具是:dotTraceredgate ANTStelerik justTraceRuntime Flow

我想跟踪每个语句的等效 CIL 命令。 我知道可以进行进一步的编译器优化,可以修改 CIL 代码或不同类型的编译托管代码 (short info)。

一种自动添加日志记录的方法是PostSharp,但又为我的情况提供了过于高级的视图。

据我所知,CLRProfiler 提供了用于方法入口和出口点等的 API 方法。没有 API 可以跟踪执行的语句。

到目前为止,我的想法是在 CIL 级别手动编写代码注入器,如此处所述(part-1part-2),每个语句将打印等效的 CIL 代码。

有没有人有更好的想法或知道任何类似的工具? 对于二进制程序集,Intel Pin 可以提供类似的功能。

更新

我不想简单地阅读源代码,我想看看执行了什么。 我很了解所有反编译器。 我在混淆和反混淆的背景下这样做。 例如,如果我有一个计算斐波那契数的方法,并且在该方法上应用了控制流混淆和其他混淆方法,那么仅仅阅读源代码是不够的。我想看看该方法是如何执行的。

我需要动态追踪

【问题讨论】:

  • 为什么不使用反编译器?
  • 这篇尖锐的文章看起来很有趣
  • @Nasreddine 请阅读更新后的问题。谢谢提问
  • dotPeek 允许您导出 pdb 文件,您应该可以使用该文件来逐步执行。

标签: c# .net reverse-engineering managed cil


【解决方案1】:

如果您只是想进行逆向工程,最好使用 dotPeek 之类的东西,它可以让您将 IL 转换为人类可读的 C#。

如果可执行文件已被混淆,那么分析和反编译无论如何都不会帮助您。

【讨论】:

    【解决方案2】:

    对于您的,您只需反编译应用程序 [使用一些反编译器,如 telerik、ILOGic、dotpeek 等],然后将一些跟踪放入您想要检查的方法中。 [可以使用 log4net 或简单的 buliltin trace]。 做过很多次这类事情

    【讨论】:

      【解决方案3】:

      ILDASM.exe 可以为您提供所需的大部分内容。它是用 VS 打包的。

      【讨论】:

      • @cipri.l 响应您的更新,我不确定 exe 但我确定 dll 动态跟踪,您可以使用 pdb 文件执行此操作。您可能想查看 pdb。
      • 伊姆拉感谢您的意见。我没有 pdb 文件。
      • ILDasm 究竟将如何提供帮助?它只是给你原始的 IL,它不会告诉你在运行时执行了什么。
      • @svick 代码不会从空间执行,而是来自那个 IL。而且,即使代码被混淆,IL 也将逐语句提供整个代码语句。我会非常详细地告诉每个控制结构,函数在非常低的级别执行哪些语句(请参阅更新的问题)。没有任何工具可以为您提供这么多细节。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      相关资源
      最近更新 更多