簡體   English   中英

Frama-C:使用指針時獲取函數輸出

[英]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);
}

它告訴我resultadd函數的輸出。 這當然是正確的,但我希望該插件在某處提及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]*sumValueFrom依賴的值)生成一個初始狀態,在該狀態下,指針為NULL或指向一個名稱與指針之一相似的塊,默認情況下具有兩個元素。 有一些命令行選項可以調整默認行為(有關更多信息,請參見“ 值分析”手冊 ),但是您可能會發現,對於更復雜的示例,您需要編寫(或生成)一個包裝函數,以設置更復雜的函數調用函數之前的初始狀態。 在這種情況下,您必須跟蹤哪個指針指向何處以重建信息。

問題的大部分在於,在Value的抽象狀態下, sum被映射到一組L可能的位置(此處減少為單例),但是*sum本身不是對象。 寫訪問將僅更新映射到L元素的所有值。 因此, From的角度看,它看起來像是對result的修改(如果更改入口點, S_sum[0] )。

暫無
暫無

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

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