2012-09-21 57 views
0

我有一個C程序(在VM中執行)的跟蹤控制流程圖,它非常複雜。我想知道如果我有一個程序跟蹤的CFG除了控制依賴項之外可以提取哪些信息!謝謝我們可以從控制流圖中獲得什麼信息?

+1

你還想知道什麼?此外,就像,控制流程如何...? –

+0

是的,只是簡單地告訴我,像什麼數據或我們可以預測它的程序行爲。我們可以通過查看它來了解解釋器的行爲模式或方式。或者它們之間的區別是什麼如果執行的二進制文件是在不同的體系結構中編譯的,則執 – archies50

回答

1

有區別在這裏提出:

  • 一個控制流圖近似到該程序的控制。 A control flow graph可以告訴你,對於程序的任何運行,其中可能是控制流。這是完全可行的,該方案可能永遠不會執行該圖的某些邊緣:

    i := 23; 
    x := some_complicated_function_returning_zero(); 
    if (x < i) { 
        print "Hello, world!"; 
    } else { 
        print "Bad!"; 
    } 
    
在該程序

,所述else分支將永遠不會被執行,然而程序分析工具通常會報告有一個控制分支兩側的流動邊緣。這是因爲程序分析是近似的。

  • 跟蹤程序的是在該程序的控制流圖的邊緣的遍歷。一套好的測試通常會進行測試,這些測試涵蓋了許多可能的控制流程路徑(或者至少是那些可行的,直到控制流程圖結構中的不精確性),但除此之外,測試用例覆蓋範圍廣泛類似於變量的值在這些執行路徑中的範圍。

一個跟蹤將讓你看到,沒有程序如何執行單次運行,同時控制流圖將允許你說「什麼是可能的方式,我的程序可以執行。」

真正的程序很大,因此整個程序的控制流程圖將會非常大,但是由於您沒有指數分支效應,因此跟蹤會相當小。

+0

您的回答很有幫助!謝謝 – archies50

+0

現在可以說...我有不同的體系結構編譯的相同程序的二進制文件!通過gettng控制流程圖,我可以瞭解解釋器行爲或有關程序行爲的一些常見信息。也許吧? – archies50

+0

?這取決於,但它主要取決於interpeter,如果它的解釋代碼,那麼你不僅看編寫的代碼的控制流,但解釋器如何執行代碼 –

相關問題