mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-26 11:41:35 +01:00
47 lines
1.3 KiB
Python
Executable File
47 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import imp
|
|
import os
|
|
import subprocess
|
|
import re
|
|
|
|
import common
|
|
rungdb = imp.load_source('config', 'rungdb')
|
|
|
|
parser = common.get_argparse(argparse_args={
|
|
'description':'''GDB step debug guest userland processes without gdbserver.
|
|
|
|
More information at: https://github.com/cirosantilli/linux-kernel-module-cheat#gdb-step-debug-userland-processes
|
|
'''
|
|
})
|
|
parser.add_argument(
|
|
'executable',
|
|
help='Path to the executable to be debugged relative to the Buildroot build directory.'
|
|
)
|
|
parser.add_argument(
|
|
'break',
|
|
default=None,
|
|
help='Break at this point, e.g. main.',
|
|
nargs='?'
|
|
)
|
|
args = common.setup(parser)
|
|
readelf_header = subprocess.check_output([
|
|
common.get_toolchain_tool('readelf'),
|
|
'-h',
|
|
os.path.join(common.build_dir, args.executable),
|
|
])
|
|
for line in readelf_header.decode().split('\n'):
|
|
split = line.split()
|
|
if line.startswith(' Entry point address:'):
|
|
addr = line.split()[-1]
|
|
break
|
|
print(addr)
|
|
extra_args = {}
|
|
extra_args['before'] = '-ex \"add-symbol-file {} {}\"'.format(args.executable, addr)
|
|
# Or else lx-symbols throws for arm:
|
|
# gdb.MemoryError: Cannot access memory at address 0xbf0040cc
|
|
# TODO understand better.
|
|
# Also, lx-symbols overrides the add-symbol-file commands.
|
|
extra_args['no_lxsymbols'] = True
|
|
rungdb.main(args, extra_args)
|