[klee-dev] Regarding getting variable names from KLEE

Nowack, Martin m.nowack at imperial.ac.uk
Thu Oct 6 12:08:02 BST 2022


Hi Tareq,

I can highly recommend you the following documents to get an understanding of the internal details of debug information and LLVM that KLEE uses in the first place:
* https://llvm.org/docs/SourceLevelDebugging.html
* https://llvm.org/docs/HowToUpdateDebugInfo.html

For the examples that you asked for, a good starting point for me are often the transformation passes of LLVM, i.e. (llvm-project/llvm/lib/Transforms/) to get an idea how different concepts are implemented and might work.
(Just one example: https://github.com/llvm/llvm-project/blob/53dc0f107877acad44824b1426986c7f88f4bc50/llvm/lib/Transforms/IPO/MergeFunctions.cpp#L566)

A good IDE support makes a huge difference in working through the source code and makes it slightly less painful.

Best,
Martin

> On 5. Oct 2022, at 20:58, Nazir, Tareq Mohammed <Tareq.Nazir at aau.at> wrote:
> 
> Hi Frank,
> 
> Thanks for the reply,
> 
> Yes I have used the second option and -fno-discard-value-names and I am able to see the variable name in the llvm bitcode .ll file. But what I need is the access to this variables in KLEE engine. Also I am trying to use DILocalVariable. I would like to know if it is possible to share any example where DILocalVariable can be used to extract the variable name. This would be really helpful.
> 
> Thanks and Best Regards,
> Tareq Mohammed Nazir
> From: klee-dev-bounces at imperial.ac.uk <klee-dev-bounces at imperial.ac.uk> on behalf of Frank Busse <f.busse at imperial.ac.uk>
> Sent: Wednesday, 5 October 2022 13:05
> Cc: klee-dev at imperial.ac.uk
> Subject: Re: [klee-dev] Regarding getting variable names from KLEE
>  
> Hi,
> 
> 
> On Wed, 5 Oct 2022 09:26:35 +0000
> "Nazir, Tareq Mohammed" <Tareq.Nazir at aau.at> wrote:
> 
> > I would like to know if I can get variable names of the source code
> > in KLEE engine. Would also like to know if KLEE engine is storing the
> > variable name information while executing the llvm bitcode
> > symbolically.
> > 
> > 
> > For example : From the below C code I want to get the buffer variable
> > name is it possible or not.
> > 
> > 
> > int main(int argc, char *argv[])
> > {
> >        char *buffer = malloc(5);
> >        buffer[6] = 'a';
> >        return 0;
> > }
> 
> There are at least two options:
> 
> 1) you compile your code with debug information (-g) and recover the
>    information from there (LLVM API):
> 
> !15 = !DILocalVariable(name: "buffer", scope: !10, file: !1, line: 4, type: !16)
> 
> 2) or you tell clang to keep variable names (-fno-discard-value-names)
>    and it will generate bitcode like:
> 
> %buffer = alloca i8*, align 8
> store i8* %call, i8** %buffer, align 8
> %0 = load i8*, i8** %buffer, align 8
> 
>    instead of:
> 
> %2 = alloca i8*, align 8
> store i8* %3, i8** %2, align 8
> %4 = load i8*, i8** %2, align 8
> 
> 
> Kind regards,
> 
> Frank
> 
> _______________________________________________
> klee-dev mailing list
> klee-dev at imperial.ac.uk
> https://mailman.ic.ac.uk/mailman/listinfo/klee-dev
> _______________________________________________
> klee-dev mailing list
> klee-dev at imperial.ac.uk
> https://mailman.ic.ac.uk/mailman/listinfo/klee-dev




More information about the klee-dev mailing list