Implements a setflag command for setting or unsetting individual flags in the $eflags register.

pull/1032/head
David 3 years ago committed by Disconnect3d
parent f2fcc95c64
commit 44bd4151ff

@ -23,6 +23,7 @@ import pwndbg.commands.cpsr
import pwndbg.commands.dt
import pwndbg.commands.dumpargs
import pwndbg.commands.elf
import pwndbg.commands.flags
import pwndbg.commands.gdbinit
import pwndbg.commands.ghidra
import pwndbg.commands.got

@ -0,0 +1,37 @@
import argparse
import gdb
import pwndbg.commands
parser = argparse.ArgumentParser(description="Modify register flags",
epilog="flags ZF 1")
parser.add_argument('flag', type=str,
help='Flag for which you want to change the value')
parser.add_argument('value', type=int,
help='Value to which you want to set the flag - only valid options are 0 and 1')
flags = {
"CF": 0,
"PF": 2,
"AF": 4,
"ZF": 6,
"SF": 7,
"TF": 8,
"IF": 9,
"DF": 10,
"OF": 11,
}
@pwndbg.commands.ArgparsedCommand(parser, aliases=["flag"])
def setflag(flag, value):
if value not in [0, 1]:
print("can only set flag bit to 0 or 1")
return
if flag.upper() not in flags.keys():
print("%s not a valid flag" % flag)
return
if value == 1:
gdb.execute("set $eflags |= (1 << %d)" % flags[flag.upper()])
elif value == 0:
gdb.execute("set $eflags &= ~(1 << %d)" % flags[flag.upper()])
Loading…
Cancel
Save