Suponiendo que estás construyendo una cadena de ROP que necesita manipular la pila, siempre puedes optar por aparatos semánticamente equivalentes, por ejemplo. PUSH / POP, MOV ESP XXX, (SUB, ADD) ESP instrucciones para construir la pila:
enlace
enlace
También, para XXX / constantes reales (inmediatas) para SUB / ADD ESP XXX, siempre puede LEA un registro y luego incluso MOV ESP, XXX / REG:
enlace
Por último, dependiendo de la DLL / EXE en la que estés buscando los gadgets, si no puedes AGREGAR / SUBTINIR fácilmente, podrías hacer un montón de cosas (utilizando registros volátiles):
;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
Incluso puede obtener valores de fantasía y movimiento en un registro volátil, SHL / SHR / ROL / ROR y luego usar LEA / PUSH. ¡Todo depende de ti para ser creativo!