2016-03-03 19 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

不,你一般不能。最简单的原因是,最终计划中的价值可能不再存在。你总是可以认为它可以使用调试信息作为简单的例子(嘿,调试器可以做到这一点),但大多数情况下,在优化程序中,即使调试器也会显示变量已经被优化远”。