Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: yourmind en 23 Octubre 2020, 20:05 pm



Título: Pusha y popa
Publicado por: yourmind en 23 Octubre 2020, 20:05 pm
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.


Título: Re: Pusha y popa
Publicado por: MCKSys Argentina en 23 Octubre 2020, 20:40 pm
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!


Título: Re: Pusha y popa
Publicado por: EdePC en 24 Octubre 2020, 01:01 am
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