[lldb-dev] GetSymbolContext(lldb.eSymbolContextEverything)

Kamenee Arumugam via lldb-dev lldb-dev at lists.llvm.org
Tue Jun 21 09:07:06 PDT 2016


Hi Greg,

Thanks for your reply. I did try the method you mention above but
variable.GetLocation() only provide me the memory address of the variable.
What exactly I am looking for was  the register offset that stores variable
i here. Example, I am looking for method able to output the one highlighted
in yellow:

Variable: id = {0x000000a2}, name = "i", type= "int", location =
DW_OP_fbreg(-564), decl = ivm_demo.c:6


Basically, I am working on  a binary instrumentation research tool, that
will inject code to check changes on selected variable. Therefore, using
register offset, I am able to inject check for instruction using this
register with this offset.
Please let me know if you have any better method to grab register offset
for particular variable.

Thanks,
Kamenee

On Mon, Jun 20, 2016 at 7:15 PM, Greg Clayton <gclayton at apple.com> wrote:

> The variables are available through the frame in your symbol context. You
> have a line of code commented out in your script:
>
>                     #variable = frame.GetVariables(target,True,True,True)
>
> Change it to:
>
> get_arguments = True # Get argument variables
> get_locals = True # Get local variables
> get_statics = True # Get globals and static variables
> get_in_scope_only = True # only get variables that are in scope
> use_dynamic = lldb.eDynamicDontRunTarget # Get dynamic types for variables
> variables = frame.GetVariables (get_arguments, get_locals, get_statics,
> get_in_scope_only, use_dynamic)
> print variables
>
> This output will look different from the output in "image lookup --address
> 0x... --verbose" because we have an actual frame here so we can dump the
> variable value itself because we have a stack frame that allows us to have
> variable values. If you want the location of the variable you can also
> print that in a for loop using "variables" from above:
>
> for variable in variables:
>     print str(variable)
>     print "Location = %s" % (variable.GetLocation())
>
>
> Each "variable" object is a lldb.SBValue type. There are many API calls on
> these that you can call manually depending on what you want. Let me know if
> you have any questions.
>
> Greg Clayton
>
>
>
>
> > On Jun 17, 2016, at 11:34 AM, Kamenee Arumugam via lldb-dev <
> lldb-dev at lists.llvm.org> wrote:
> >
> > Hi,
> >
> > I am trying program using Lldb Python API to get an output exactly same
> when I run this command "image lookup --address 0x0000000405a6 --verbose".
> But when I print return value of
> GetSymbolContext(lldb.eSymbolContextEverything), it doesnt contain the
> decoding of local variables which the above commands can print out local
> variables.
> >
> > I have attached a simple script.py that I have developed. It is not
> possible to print out local variables using the APIs or I am missing
> something out?
> >
> > I am looking forward to hear from you soon.
> >
> > Thanks,
> > kmn
> > <script.txt>_______________________________________________
> > lldb-dev mailing list
> > lldb-dev at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20160621/ef57ddc3/attachment.html>


More information about the lldb-dev mailing list