我假设您正在做一些与跟踪网络数据包的数据流/代码流相关的事情,可能与数据污染密切相关?
假设我始终使用相同的网络数据包跟踪作为数据包处理应用程序的输入,假设我在两台不同的机器上检测同一个应用程序。内存参考轨迹有何不同?
有多种因素可以使内存trace trace完全不同,关键是“两台不同的机器”:
相同操作系统的精确副本:跟踪几乎相同(因为堆栈、堆和虚拟内存管理器的工作方式相同),但地址会改变(ASLR)。
相同的操作系统(但不一定是相同版本的系统共享库):如果没有重新编译目标应用程序,可能与上述相同。由于堆管理器的行为可能有所不同,因此可能存在细微差别。
不同的操作系统(需要重新编译被跟踪的应用程序):完全不同的跟踪。
显然 Pin 仪器用户空间并且是独立于架构的,所以我不希望在两个输出内存参考跟踪中看到很大的质量差异。这个假设正确吗?
Pintools 需要针对不同的架构重新编译,但 pintool 本身不应改变跟踪目标应用程序的方式(相同的 pintool + 相同的 os + 相同的应用程序 = 几乎相同的跟踪)。
如果我尝试将网络数据包注入数据包处理应用程序的速率,内存跟踪将如何变化?
这取决于系统,也取决于您的插入点。如果您开始跟踪,recv()
或者recvfrom()
可能存在一些拥塞或丢包 (UDP),例如,速率太重要。取决于协议、您的接收窗口等。这里确实有多个因素。
或者它会改变吗?如果是的话,我如何检测输出轨迹的不同?
对于这种情况,我可能会检查代码流而不是数据流(对我来说似乎更容易)。给定完全相同的数据包但不同的速率,如果代码分支不相同(可能在基本块 (BBL) 级别),这会立即表明相同数据包的处理方式不同。