Duda sobre OPCODE

Iniciado por Debci, 1 Abril 2010, 17:06 PM

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

Debci

Hola a todos, estoy aprendiendo asm, y para comprenderlo mejor y llegar a hacer virguerias que se ven por ahi, he decidido leerme la teoria completa de los procesadores y CPU, y como se codifican las instruciones de asm a opcode para ejecutar, por ejemplo:
La instrucion que suma los registros EAX y EBX y almacena el resultado en EAX (es add si no me equivoco), como es que luego se codifica a:
03 c3
y presupongo que si hago por ejemplo un payload que haga esa operacion con los registros seria algo asi a injectar:

\x03\xC3 que vendria a ser 0x03 y 0xC3
como se hace esa transformación?
Osea que la equivalencia de los valores ASCII en hexadecimal que encuentro cuando abro un programa con Text plano son los opcode?
Perdonad si quizás este diciendo burradas, pero son cosas que he querido saber siempre.
Otra pregunta, el operador db para que sirve? deduzco que es para alamacenar en memoria, pero no lo se seguro.

Saludos

Eternal Idol

0x3 y 0xC3 ya estan en hexadecimal, en MASM se usa la siguiente notacion:

Código (asm) [Seleccionar]
.386
.model flat, stdcall

.code
main:
db 03h, 0c3h ;add eax, ebx es insertado aca, como dos bytes
dw 0c303h ;add eax, ebx es insertado aca, como una palabra
ret
end main
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Debci

Cita de: Eternal Idol en  1 Abril 2010, 17:25 PM
0x3 y 0xC3 ya estan en hexadecimal, en MASM se usa la siguiente notacion:

Código (asm) [Seleccionar]
.386
.model flat, stdcall

.code
main:
db 03h, 0c3h ;add eax, ebx es insertado aca, como dos bytes
dw 0c303h ;add eax, ebx es insertado aca, como una palabra
ret
end main

osea que la segunda letra que acompaña quiere decir si es byte, word, double word, cuadruple y 10 bytes. No?
Y otra cosa, como se que 0c3 y 0xC3 quiere decir cierto codigo en asm?

Saludos

Eternal Idol

Si, db, dw, dd, dq (no se si hay mas pero existe el operador dup para los arrays).

¿Como supiste en este caso?  ;D

http://www.sandpile.org/ia32/index.htm
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Debci

Cita de: Eternal Idol en  1 Abril 2010, 17:44 PM
Si, db, dw, dd, dq (no se si hay mas pero existe el operador dup para los arrays).

¿Como supiste en este caso?  ;D

http://www.sandpile.org/ia32/index.htm
Leyendo xD
Pero me resuelven mas uds. porque lo explican de manera menos técnica.

Saludos

[Zero]

Las equivalencias están definidas por el procesador, no es que sea equivalencia de las instrucciones nemotécnicas ni nada parecido.

http://www.masm32.com/board/index.php?action=dlattach;topic=63.0;id=58

Con eso puedes ver comodamente las equivalencias.

Saludos

"El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche

Debci

Cita de: Hacker_Zero en  1 Abril 2010, 17:52 PM
Las equivalencias están definidas por el procesador, no es que sea equivalencia de las instrucciones nemotécnicas ni nada parecido.

http://www.masm32.com/board/index.php?action=dlattach;topic=63.0;id=58

Con eso puedes ver comodamente las equivalencias.

Saludos
Y como interpreta esas shellcode el procesador? xD segun tenia entendido el procesador entiende de calculos lógicos y no caracteres hexadecimales.

Saludos

[Zero]

No son caracteres hexadecimales, son numeros hexadecimales, que se pasan a binario  :P.

Saludos

"El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche

Debci

Cita de: Hacker_Zero en  1 Abril 2010, 21:14 PM
No son caracteres hexadecimales, son numeros hexadecimales, que se pasan a binario  :P.

Saludos
claro, pero cada numero hexadecimal representa un caracter no?
Entonces lo que vemos al abrir un ejecutable con editor de texto, si pasamos los caracteres ascii a hexadecimal y este numero lo relacionamos en la tabla sale desensamblado?
Aunque si no me equivoco todo esto iba por proceso (en memoria) y no en DD.

Saludos

08l00D

#9
Cita de: ..::| D3Bć1 |::. en  1 Abril 2010, 18:14 PM
Y como interpreta esas shellcode el procesador? xD segun tenia entendido el procesador entiende de calculos lógicos y no caracteres hexadecimales.
El procesador hace calculos logicos, lo que el procesador "entiende" son, remontandose a lo mas basico, señales electricas mediante niveles de voltaje las cuales son representadas en el sistema binario (0 y 1)..
Lo de hexadecimal no es mas que una representacion para facilitar la comprension..

http://www.pctechguide.com/21Architecture_Principles.htm

Cita de: ..::| D3Bć1 |::. en  1 Abril 2010, 22:10 PM
claro, pero cada numero hexadecimal representa un caracter no?
No, un numero es un numero, dependiendo de la implementacion y de la interpretacion puede representar algo mas..
vos te debes confundir pensando que las instrucciones que los procesadores entienden son los nmemonicos que se usan en assembly... pero eso no es correcto para nada.. las instrucciones que usan los procesadores son cadenas predefinidas de bits... las cuales en los manuales como por ejemplo de intel estas son representadas en hexadecimal pero esto no quiere decir que ese numero hexadecimal represente el nombre de la instruccion en ascii  :P
Sino fijate que hay ensambladores que cambian el juego de nmemotecnicos que el que propone Intel y el resultado es el mismo.. Eso siempre va a depender de la implantacion ya que no hay nada estandar