记录二进制文件的行为?

Posted

技术标签:

【中文标题】记录二进制文件的行为?【英文标题】:Logging the Behavior of a Binary? 【发布时间】:2011-09-27 04:43:56 【问题描述】:

我想弄清楚当命令行标志被传递给 Windows 上的程序时,哪些指令被执行不同,我有已编译(和优化)的二进制文件,没有调试符号或任何类似的东西。我知道区别不会超过几条指令。

我将如何解决这个问题?是否有任何技术可以准确记录程序在特定时间段内执行的指令? (请注意,这涉及任何系统调用,只是因为命令行标志而在循环中设置了一个标志。)

【问题讨论】:

【参考方案1】:

您可以使用 AMD 的 CodeAnalyst 来执行此操作,使用基于指令的分析方法。它还有一个 API,你可以在你的应用程序中触发事件,这样你就可以监控特定区域。您也可以使用反汇编程序,据我了解,您使用“指令”一词来表示高级代码操作和低级机器代码(执行无法更改,只有编译器发出的代码可以更改执行高级操作)。

【讨论】:

谢谢!这看起来是一个非常棒的工具。但是,它通常不会捕获某些内容,因为大多数指令甚至都没有被采样。关于如何解决这个问题的任何想法(如果可能的话)? @Mehrdad:那么您可以尝试其他采样方法之一,例如基于时间的采样方法。 (应该有一个示例教程)。

以上是关于记录二进制文件的行为?的主要内容,如果未能解决你的问题,请参考以下文章

二进制日志文件内容和中继日志内容的区别

使用带文件的fseek(文件,0,SEEK_END)了解二进制流的未定义行为

发布的应用程序的行为与相同设备上的调试二进制文件不同

oracle控制文件

Firebase A/B 测试离线行为

C++,读取二进制 ifstream 时的奇怪行为