使用intel-pin检测R程序

时间:2019-08-31 10:35:58

标签: r intel-pin

我正在使用pinatrace.so工具对R程序进行检测,以生成用于读取和写入内存指令的跟踪。我观察到的是,多个#eof语句在跟踪文件中的不同位置打印(实际上应该只在跟踪末尾打印)。另外,#eof之后的下一行会变形,并且不能正确打印。

我正在使用以下命令调用R Shell和我的R程序:

../../../ pin -follow_execv -t obj-intel64 / pinatrace.so-/home/R-3.5.3./bin/R -f hello.R

跟踪文件如下所示打印:

0 0x7ffc812cd1c8

1 0x7ffc812cd1c8

0 0x7f7f8555ee78

#eof

f6971ce8

1 0x6f4518

0 0x7ffc171a0b70

...

...

1 0x7ffc6da8f078

0 0x7f7c38786e78

#eof

ffc171a07c8

0 0x6f4e30

0 0x6ff918

此仪器有什么问题?

1 个答案:

答案 0 :(得分:1)

使用follow_execv旋钮调用Pin时,它将在创建的每个子进程中创建其自身的新副本。新副本不知道另一个副本正在父级中运行或根本没有运行。参见here

  

如果启用了-follow_execv并且用户尚未注册以获取通知,则将使用与当前进程相同的命令行将Pin注入到子进程/ exec执行的进程中。

如果未在使用-follow_execv的情况下创建Pintool,则Pintool的所有副本通常都将写入同一文件。由于不同的进程将写入相同的文件,并在终止符之后的其他进程正在写入该文件的同时将其终止,因此这会创建奇怪的工件,例如您所看到的。

最简单的解决方案是在文件中添加PID后缀,另一种选择是使用“跟随子进程API”(上面链接)来确定哪个子进程是您要跟踪的实际R程序。最后,R可能支持检测,您可以使用它来检测程序本身。