添加jmp指令

时间:2013-04-04 01:04:28

标签: compiler-construction llvm intel instrumentation testcocoon

我希望在二进制文件中的每个类似jmp的指令之后添加无害 unconditional branches,以确保在我们保留时可以观察到通过分支使用英特尔Last Branch Record执行的分支指令记录。就像在这段代码中一样:

if(a==0){
 f1(); 
}
else{
 f2();
}

执行else部分时,可能会执行jne指令。但是,没有jmp-related指令来观察if部分的执行情况。

  • 二进制级别源级别是否存在静态添加条件语句的unconditional jmp指令的工具?
  • 我尝试使用这样的TestCocooncsgcc --cs-branch -g test.c但是,检测开销非常高(大约是原始可执行文件的3倍)。我想我没有使用正确的编译器选项。如果你可以提供一些指针来添加一些指针,以便在低仪表开销的情况下添加无害的无条件分支,那就太棒了。

2 个答案:

答案 0 :(得分:2)

Pin是一个很好的二进制检测工具,适用于X86。您可以轻松实现您的目标。

答案 1 :(得分:0)

是的,有一个工具可以做到这一点静态,虽然它需要源代码生产商合作。这是一个video where some developers used llvm to try and find race conditions。但是,建议的PIN工具可以精确地执行您想要的操作(或者至少如所描述的那样)。

一个好问题我认为你应该问自己,这是否是必须静态完成的分析。就此而言,我指向dynamic analysis。另一个要问的问题是,你是否应该从头开始这样做;社区所拥有的工具的可用性相当广泛。 Here's a good profiler,但我不确定这个是否符合您的需求,因为您没有如此好地描述您的需求......

此外,关于开销 - 我认为几乎所有的工具工具都会增加批次的开销。为了解决这个问题,我要说的是,产生高效分析所需的努力通常是不值得的。除非你正在制作一个分析库,否则我会反对它,因为你想要的只是仪器的结果。