簡體   English   中英

為什么在Frama-C價值分析中無法訪問代碼?

[英]Why is code unreachable in Frama-C Value Analysis?

使用某些基准(例如, http://www.eecs.umich.edu/mibench/automotive.tar.gzsusan中的susan運行Frama-C值分析時,我們注意到許多塊被認為是無效代碼或無法訪問。 但是,實際上,這些代碼是在我們從這些塊中打印出一些調試信息時執行的。 有沒有人注意到這個問題? 我們該如何解決呢?

您的代碼具有Pascal列表中未列出的特性,並且可以解釋無效代碼的某些部分。 如此聲明了一些函數

 f(int x, int y);

返回類型完全丟失。 C標准指示此類函數應返回int ,並且Frama-C遵循此約定。 解析這些函數時,表明它們從未在其某些路徑上返回任何內容

Body of function f falls-through. Adding a return statement.

在return語句的頂部,Frama-C還添加了/*@ assert \\false; ;。 注釋,指示不返回任何內容的函數的執行路徑應為無效代碼。 在您的代碼中,此注釋始終為false:這些函數應該返回void ,而不是int 您應該使用良好的返回類型來更正代碼。

Frama-C的價值分析結果中死代碼的產生可以歸結為兩個方面,甚至這兩個方面也只是人為的問題,從分析儀的角度來看是無法區分的。

  1. 每次到達特定語句時,確定發生的實際錯誤。 例如, y = 0; x = 100 / y;之后的代碼y = 0; x = 100 / y; y = 0; x = 100 / y; 之所以無法訪問,是因為該程序每次都會在該部門停止。 一些應該是運行時錯誤的錯誤並不總是會停止執行,例如,寫入無效地址。 讓自己感到幸運的是,他們參與了Frama-C的價值分析,而不是相反。
  2. 缺乏分析上下文的配置,包括未提供具有信息性的main()函數和諸如Frama_C_interval()類的內置函數來設置程序輸入的變化范圍,缺少缺少規范或替換代碼的庫函數,C程序中的匯編代碼,如果合適的話,缺少選項-absolute-valid-range ,...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM