数据包处理应用程序的 Intel Pin 内存参考跟踪

Memory reference traces with Intel Pin of packet processing applications

我正在学习如何使用 Intel Pin,我有几个关于特定用例的检测过程的问题。我想创建一个简单数据包处理应用程序的内存引用跟踪。为此,我开发了所需的 pintool,我的问题如下。

谢谢

我假设你正在做一些与跟踪网络数据包的数据流/代码流有关的事情,可能与数据污染有关os?

Assuming I use the same network packet trace at all times as input to my packet processing application and let's say I instrument that same application on two different machines. How will the memory reference traces be different?

有多种因素可以使内存轨迹轨迹大不相同,关键是"two different machines":

  • 相同的精确副本O.S:跟踪几乎相同(因为堆栈、堆和虚拟内存管理器将工作相同)除了地址会改变(ASLR)。

  • 相同O.S(但不一定是相同版本的系统共享库):如果没有对目标应用程序进行重新编译,可能与上面相同。由于堆管理器的行为可能不同,可能会有细微差别。

  • 不同O.S(需要重新编译跟踪的应用程序):完全不同的跟踪。

Apparently Pin instruments userspace and is architecture independent so I wouldn't expect to see big qualitative differences in the two output memory reference traces. Is that assumption correct ?

Pintools 需要针对不同的 arch 重新编译,但 pintool 本身不应改变跟踪目标应用程序的方式(相同的 pintool + 相同的 os + 相同的应用程序 = 几乎相同的跟踪)。

How will the memory trace change if I experiment with the rate at which I inject network packets to my packet processing application ?

这取决于系统,也取决于您的插入点。如果您在 recv()recvfrom() 开始跟踪,则可能会出现一些拥塞或丢包 (UDP),例如,如果速率太重要。取决于协议、您的接收 window 等。这里确实有多个因素。

Or will it change at all and if yes how can I detect how the output traces differ ?

对于这种情况,我可能会检查代码流而不是数据流(对我来说似乎更容易)。给定完全相同的数据包但速率不同,如果代码分支不相同(可能在基本块 (BBL) 级别),这立即表明相同的数据包被不同地处理。