diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2019-08-20 18:01:57 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2019-08-20 18:01:57 +0000 |
commit | 88c643b6fec27eec436c8d138fee6346e92337d6 (patch) | |
tree | 82cd13b2f3cde1c9e5f79689ba4e6ba67694843f /examples/python/disasm.py | |
parent | 94994d372d014ce4c8758b9605d63fae651bd8aa (diff) |
Notes
Diffstat (limited to 'examples/python/disasm.py')
-rwxr-xr-x | examples/python/disasm.py | 126 |
1 files changed, 0 insertions, 126 deletions
diff --git a/examples/python/disasm.py b/examples/python/disasm.py deleted file mode 100755 index af024a6887da..000000000000 --- a/examples/python/disasm.py +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/python - -#---------------------------------------------------------------------- -# Be sure to add the python path that points to the LLDB shared library. -# On MacOSX csh, tcsh: -# setenv PYTHONPATH /Developer/Library/PrivateFrameworks/LLDB.framework/Resources/Python -# On MacOSX sh, bash: -# export PYTHONPATH=/Developer/Library/PrivateFrameworks/LLDB.framework/Resources/Python -#---------------------------------------------------------------------- - -import lldb -import os -import sys - - -def disassemble_instructions(insts): - for i in insts: - print i - - -def usage(): - print "Usage: disasm.py [-n name] executable-image" - print " By default, it breaks at and disassembles the 'main' function." - sys.exit(0) - -if len(sys.argv) == 2: - fname = 'main' - exe = sys.argv[1] -elif len(sys.argv) == 4: - if sys.argv[1] != '-n': - usage() - else: - fname = sys.argv[2] - exe = sys.argv[3] -else: - usage() - -# Create a new debugger instance -debugger = lldb.SBDebugger.Create() - -# When we step or continue, don't return from the function until the process -# stops. We do this by setting the async mode to false. -debugger.SetAsync(False) - -# Create a target from a file and arch -print "Creating a target for '%s'" % exe - -target = debugger.CreateTargetWithFileAndArch(exe, lldb.LLDB_ARCH_DEFAULT) - -if target: - # If the target is valid set a breakpoint at main - main_bp = target.BreakpointCreateByName( - fname, target.GetExecutable().GetFilename()) - - print main_bp - - # Launch the process. Since we specified synchronous mode, we won't return - # from this function until we hit the breakpoint at main - process = target.LaunchSimple(None, None, os.getcwd()) - - # Make sure the launch went ok - if process: - # Print some simple process info - state = process.GetState() - print process - if state == lldb.eStateStopped: - # Get the first thread - thread = process.GetThreadAtIndex(0) - if thread: - # Print some simple thread info - print thread - # Get the first frame - frame = thread.GetFrameAtIndex(0) - if frame: - # Print some simple frame info - print frame - function = frame.GetFunction() - # See if we have debug info (a function) - if function: - # We do have a function, print some info for the - # function - print function - # Now get all instructions for this function and print - # them - insts = function.GetInstructions(target) - disassemble_instructions(insts) - else: - # See if we have a symbol in the symbol table for where - # we stopped - symbol = frame.GetSymbol() - if symbol: - # We do have a symbol, print some info for the - # symbol - print symbol - # Now get all instructions for this symbol and - # print them - insts = symbol.GetInstructions(target) - disassemble_instructions(insts) - - registerList = frame.GetRegisters() - print "Frame registers (size of register set = %d):" % registerList.GetSize() - for value in registerList: - # print value - print "%s (number of children = %d):" % (value.GetName(), value.GetNumChildren()) - for child in value: - print "Name: ", child.GetName(), " Value: ", child.GetValue() - - print "Hit the breakpoint at main, enter to continue and wait for program to exit or 'Ctrl-D'/'quit' to terminate the program" - next = sys.stdin.readline() - if not next or next.rstrip('\n') == 'quit': - print "Terminating the inferior process..." - process.Kill() - else: - # Now continue to the program exit - process.Continue() - # When we return from the above function we will hopefully be at the - # program exit. Print out some process info - print process - elif state == lldb.eStateExited: - print "Didn't hit the breakpoint at main, program has exited..." - else: - print "Unexpected process state: %s, killing process..." % debugger.StateAsCString(state) - process.Kill() - - -lldb.SBDebugger.Terminate() |