Pusha y popa

Iniciado por yourmind, 23 Octubre 2020, 20:05 PM

0 Miembros y 1 Visitante están viendo este tema.

yourmind

Buenos días. Estoy jugando en ollydbg. Por lo que veo en x86 las instrucciones ( PUSHAD y PUSHA => Código: 60) y ( POPAD y POPA => Código: 61) tienen el mismo identificador de instrucción.


Cuando fuerzo en ensamblador escribiendo PUSHA se corrige automaticamente a PUSHADD y lo mismo pasa con POPA que se corrige a PUSHADD. Supongo que depende de otro factor que se utilice una intrucción u otra.
Como puedo forzar la ejecución de estas instrucciones para mover solo 16 bits?

Gracias.

MCKSys Argentina

Depende del ensamblador de Olly. En este caso toma lo mismo PUSHA y PUSHAD como operand-size de 32 bits.

La única forma es pushear los valores 1 a 1. No conozco forma de  "forzar" al asm de Olly (aunque no descarto que exista alguna forma).

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


EdePC

Supongo que dichas instrucciones son interpretadas como pusha o pushad dependiendo de la arquitectura 16-bit o 32-bit, ya que acabo de compilar un exe en 16-bit y otra en 32-bit, y pues siguen siendo 0x60 solo que en el de 16-bit lo interpreta como pusha o pushaw (push all word) y en 32-bit como pushad (push all dword)

Entonces hacer de cuenta que la instrucción 0x60 simplemente hace un push de los registros completos independientemente si está en 16-bit o 32-bit, como mandarle a alguien a comprar 6 panes y ya, dicho comprador no va ha revisar que si los panes son muy grandes solo debería traer la mitad, o si son muy pequeños mejor traer el doble XD