2013-04-04 109 views
1

我想在每一个二进制JMP般的指令后添加无害unconditional branches,以确保告吹分支可以观察到,当我们请的执行分支指令记录使用英特尔的Last Branch Record。像这样的代码:添加JMP指令

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

当执行else部分,一个jne指令可能会被执行。但是,没有jmp-related指令观察到if部分被执行。

  • 是否有工具来静态地二进制级别源级添加的条件语句这些unconditional jmp说明?
  • 我尝试使用TestCocoon这样的:csgcc --cs-branch -g test.c但是,仪表开销是相当高(约3倍的原始可执行文件)。我想我没有使用正确的编译器选项。这将是巨大的,如果你能添加无害无条件分支低的仪器开销提供一些指引。

回答

2

Pin是X86的一个很好的二进制仪表工具。您可以轻松实现您的目标。

0

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

一个很好的问题,我想你应该问自己是否这是分析的东西,一定要静态完成。对于这个问题,我点你走向dynamic analysis。问另一个问题是你是否真正应该从一开始就这样做;社区所提供的工具的可用性相当广泛。 Here's a good profiler,但我不确定这个确切的一个适合您的需求,因为您还没有描述您的需求如此之好......

另外,关于开销 - 我认为几乎任何仪器工具将添加很大的开销。为了解决这个问题,我想说的是,生成高效概要文件所需的努力通常是不值得的。除非你正在制作一个分析库,否则我会建议不要这样做,因为所有你想要的都是仪器的结果。