2013-04-04 108 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,但我不確定這個確切的一個適合您的需求,因爲您還沒有描述您的需求如此之好......

另外,關於開銷 - 我認爲幾乎任何儀器工具將添加很大的開銷。爲了解決這個問題,我想說的是,生成高效概要文件所需的努力通常是不值得的。除非你正在製作一個分析庫,否則我會建議不要這樣做,因爲所有你想要的都是儀器的結果。