This file contains reference information on the criteria GSA uses to (1) eliminate gadgets from consideration in the set and (2) score the remaining gadgets in theset for quality.
- Gadgets that consist only of the GPI (SYSCALL gadgets excluded)
- Gadgets that have a first opcode that is not useful - we assume that the first instruction is part of the desired operation to be performed (otherwise attacker would just use the shorter version)
- Gadgets that end in a call/jmp (ROPgadget should not include these in the first place)
- Gadgets that create values in segment or extension registers, or are RIP-relative
- Gadgets ending in returns with offsets that are not byte aligned or greater than 32 bytes
- Gadgets containing ring-0 instructions / operands
- Gadgets that contain an intermediate GPI/interrupt (ROPgadget should not include these in the first place)
- ROP Gadgets that perform non-static assignments to the stack pointer register
- JOP/COP Gadgets that overwrite the target of and indirect branch GPI
- JOP/COP gadgets that are RIP-relative
- Syscall gadgets that end in an interrupt handler that is not 0x80 (ROPgadget should not include these)
- Gadgets that create value in the first instruction only to overwrite that value before the GPI
- Gadgets that contain intermediate static calls
- (+3.0) Gadget has intermediate conditional jump
- (+2.0) Gadget has intermediate conditional move or exchange
- (+1.0) Gadget has intermediate set instruction
- (+1.5) Gadget has intermediate static shift/rotate operation on value-carrying register
- (+1.0) Gadget has intermediate static non-shift/rotate operation on value-carrying register
- (+1.0) Gadget has intermediate run-time modification to a bystander register
- (+0.5) Gadget has intermediate static modification to a bystander register
- (+1.0) Gadget has intermediate instruction that stores value in memory location
- (+2.0) Gadget contains intermediate leave instruction
- (+2.0) Gadget's cumulative stack pointer offsets are negative
- (+4.0) Gadget has intermediate instruction that performs move, exhange, or load address operation on RSP/ESP
- (+3.0) Gadget has intermediate instruction that performs shift/rotate operation on RSP/ESP
- (+1.0) Gadget has intermediate instruction that pops stack value into RSP/ESP
- (+2.0) Gadget has intermediate instruction that performs any other static operation on RSP/ESP
- (+3.0) Gadget has intermediate instruction that performs shift/rotate operation on the register targeted by the GPI
- (+2.0) Gadget has intermediate instruction that performs any other static operation on the register targeted by the GPI