Use GDB to trace two variables and check if the offset/pointer value has grown beyond the end value
# Trace two variables and check if the offset/pointer value has grown beyond the end | |
# We assume/know that rl_point > rl_end is true as we use reverse debugging with rr | |
# We want to find the point were everything was okay. | |
# enter "interactive" python shell with 'pi' and exit after pasting with 'ctrl+d' | |
POINT_VAR_NAME = 'rl_point' | |
END_VAR_NAME = 'rl_end' | |
class bcolors: | |
FAIL = '\033[91m' | |
ENDC = '\033[0m' | |
BOLD = '\033[1m' | |
UNDERLINE = '\033[4m' | |
class CompareBreakpoint(gdb.Breakpoint): | |
def stop(self): | |
point_value = gdb.lookup_symbol(POINT_VAR_NAME)[0].value() | |
end_value = gdb.lookup_symbol(END_VAR_NAME)[0].value() | |
#if a difference of e.g. 1 is accetable | |
#if (end_value - point_value) < -1: | |
if point_value <= end_value: | |
print(f'{bcolors.FAIL} {bcolors.BOLD} {bcolors.UNDERLINE}') | |
print(f'[!] {END_VAR_NAME}: {end_value} \t {POINT_VAR_NAME}: {point_value}') | |
print(f'{bcolors.ENDC}', end='') | |
return True | |
return False | |
CompareBreakpoint(END_VAR_NAME, gdb.BP_WATCHPOINT, gdb.WP_WRITE) | |
CompareBreakpoint(POINT_VAR_NAME, gdb.BP_WATCHPOINT, gdb.WP_WRITE) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment