【发布时间】:2020-10-19 03:15:57
【问题描述】:
我正在分析我使用 PIN 编写的应用程序。应用程序的源代码使用了一个数组 - 我希望 PIN 能够捕获对数组进行的每条加载指令。
目前,我已经注释了我要分析的应用程序的源代码。每次从数组中读取时,我首先调用一个函数 startRegionOfInterest()。一旦我从数组中读取完毕,我就会调用另一个函数 endRegionOfInterest()。我可以使用 PIN 轻松捕获对这两个函数的调用 - 每当这两个调用之间存在负载时,我认为这是对我感兴趣的数组的负载。
但是,这是相当粗粒度的,因此我最终将大量不属于感兴趣数组的负载分类为对数组的读取。
有没有一种更简单的方法可以更准确地捕获对我感兴趣的阵列产生的所有负载?
【问题讨论】:
-
我假设你知道数组的地址和长度? PIN我不是很了解,但想必它能解码一条指令,从它的寻址方式中找出有效地址。
-
@PeterCordes 我有数组的长度,但我将如何使用 PIN 检索地址?
-
如果它是静态分配的,应该有一个与之关联的符号。如果没有,您需要找到以某种方式加载地址的负载。如果您知道编译器使用了特定的寻址模式,则可以使用它。碰巧与某个构建匹配的易碎的东西可能适合一次性使用。也许像特定 NOP 编码这样的标记可以帮助您通过 PIN 找到它。
-
听起来您需要在问题中提供更多详细信息,了解您的程序如何访问此数组,以及它是什么类型的数组。
标签: c++ assembly profiling intel-pin