2016-03-03 40 views
0

當您在LLVM中運行程序時,是否可以知道操作數的值?在LLVM中的運行時訪問操作數指令的內容

對於下面的C代碼和IR,是否有可能在運行時知道argc的內容?是否有可能在運行時知道該變量的內存地址?

if (argc == 1) { 
    .... 
} else { 
    .... 
} 

%cmp.i = icmp eq i32 %argc, 1 
br i1 %cmp.i, label %f.exit, label %if.else.i 

我想到的最糟糕的可能性是跟蹤每個變量從初始化到修改它的所有指令。

+0

我很困惑你的意思是「運行時」。 'argc'的內容是'argc',它的地址是'&argc' - 在LLVM IR中,可能有一個'alloca',你可以'加載'。你是指編譯器的運行時間(即編譯時)? –

+0

運行時我想說當程序運行時。 – evelina

+0

加入Ismail,我也認爲你應該澄清你的意思是「在運行時知道argc的內容」。也許提供更多關於你想要達到的內容的背景? – Oak

回答

0

不,你一般不能。最簡單的原因是,最終計劃中的價值可能不再存在。你總是可以認爲它可以使用調試信息作爲簡單的例子(嘿,調試器可以做到這一點),但大多數情況下,在優化程序中,即使調試器也會顯示變量已經被優化遠」。