簡體   English   中英

Frama-C 是否捕獲了讀取未初始化堆棧變量的 UB?

[英]Does Frama-C catch the UB of reading uninitialised stack variables?

我正在探索 Frama-C 並嘗試了這個例子,根據手冊(第 83 頁)應該處理(CWE-457)和 RTE 手冊 2.7(整數有陷阱表示嗎? http://www. open-std.org/jtc1/sc22/wg14/www/docs/n2091.htm )應該被覆蓋?

/*@ assigns \nothing; @*/
int f() {
  int a;
  return a;
}

/*@ assigns \nothing; @*/
int main() {
    if (f() < 0) {
        return 0;
    } else {
        return 1;
    }
}                                                                                                                                                
#include<stdio.h>

/*@ assigns \nothing; @*/
char f() {
  char a;
  return a;
} 
                                                                                                                                                          
/*@ assigns \nothing; @*/
int main() {
  char s[2];
  s[0] = f();
  s[1] = '\0';
  puts(s);
  return 0;
} 

但是,當我運行這些示例frama-c -wp -wp-rte它們似乎通過了。 這是預期的行為嗎?

正如RTE 插件手冊中提到的(誠然不是以非常突出的方式),在第 20 頁的表 3.2 中,為其生成初始化相關斷言的函數集默認為空。 主要原因是它可能會生成大量斷言(基本上每次使用未顯式初始化的局部變量時),並且用戶對它們的興趣往往不如無效指針取消引用或算術溢出等。

如果要為所有 function 生成它們,則需要在 Frama-C 命令行上使用-rte-initialized @all ,如: frama-c -wp -wp-rte -rte-initialized @all file.c 您可以在手冊的第 2.7 節中找到有關 RTE 處理初始化斷言的更多信息。

暫無
暫無

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

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