[英]Frama-C: Getting function outputs when using pointers
我需要獲取函數所有輸出的列表。 當我在以下代碼上使用From
-plugin時
void add(int *sum, int a, int b)
{
*sum = a + b;
}
int main()
{
int result;
add(&result, 1, 2);
}
它告訴我result
是add
函數的輸出。 這當然是正確的,但我希望該插件在某處提及sum
。 我知道sum
是一個指針並且未在函數中進行修改,因此它不是輸出,但是*sum
被修改了,我想知道這一點。 有沒有簡單的方法(或任何方法)來實現這一目標?
如果將add
設置為主要入口點,則可以檢索所需的信息:
$ frama-c -main add -deps file.c
[...]
[from] ====== DEPENDENCIES COMPUTED ======
These dependencies hold at termination for the executions that terminate:
[from] Function add:
S_sum[0] FROM sum; a; b
基本上, S_sum[0]
是*sum
: Value
( From
依賴的值)生成一個初始狀態,在該狀態下,指針為NULL
或指向一個名稱與指針之一相似的塊,默認情況下具有兩個元素。 有一些命令行選項可以調整默認行為(有關更多信息,請參見“ 值分析”手冊 ),但是您可能會發現,對於更復雜的示例,您需要編寫(或生成)一個包裝函數,以設置更復雜的函數調用函數之前的初始狀態。 在這種情況下,您必須跟蹤哪個指針指向何處以重建信息。
問題的大部分在於,在Value
的抽象狀態下, sum
被映射到一組L
可能的位置(此處減少為單例),但是*sum
本身不是對象。 寫訪問將僅更新映射到L
元素的所有值。 因此, From
的角度看,它看起來像是對result
的修改(如果更改入口點, S_sum[0]
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.