Supponendo che stai costruendo una catena ROP che ha bisogno di manipolare lo stack, puoi sempre optare per gadget semanticamente equivalenti, ad es. PUSH / POP, MOV ESP XXX, (SUB, ADD) Istruzioni ESP per costruire lo stack:
link
link
Inoltre, per XXX / costanti effettive (immediatamente) per SUB / ADD ESP XXX, puoi sempre LEA un registro quindi anche MOV ESP, XXX / REG:
link
Infine, a seconda della DLL / EXE alla quale stai cercando i gadget, se non puoi facilmente AGGIUNGERE / SUB ESP potresti fare un sacco di cose (usando registri volatili):
;ADD/INC ESP SEMANTICS EQUIVALENT
POP EBX ;semantically same as MOV EBX, ESP; ADD ESP 0x4
XOR EBX, EBX ;zeroes EBX if you wanna reuse the register
;SUB/DEC ESP SEMANTICS EQUIVALENT
PUSH EBX ;semantically same as MOV ESP, EBX; SUB ESP 0x4
È anche possibile ottenere valori di fantasia e mov in un registro volatile, SHL / SHR / ROL / ROR e quindi utilizzare LEA / PUSH. Spetta a te essere creativo!