我希望在二进制文件中的每个类似jmp的指令之后添加无害 unconditional branches
,以确保在我们保留时可以观察到通过分支使用英特尔Last Branch Record
执行的分支指令记录。就像在这段代码中一样:
if(a==0){
f1();
}
else{
f2();
}
执行else
部分时,可能会执行jne
指令。但是,没有jmp-related
指令来观察if
部分的执行情况。
unconditional jmp
指令的工具? TestCocoon
:csgcc --cs-branch -g test.c
但是,检测开销非常高(大约是原始可执行文件的3倍)。我想我没有使用正确的编译器选项。如果你可以提供一些指针来添加一些指针,以便在低仪表开销的情况下添加无害的无条件分支,那就太棒了。 答案 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,但我不确定这个是否符合您的需求,因为您没有如此好地描述您的需求......
此外,关于开销 - 我认为几乎所有的工具工具都会增加批次的开销。为了解决这个问题,我要说的是,产生高效分析所需的努力通常是不值得的。除非你正在制作一个分析库,否则我会反对它,因为你想要的只是仪器的结果。