:D
hola!
bueno no se si esto va aqui :P pero lo aprendi de aqui del foro de ing inversa :P
bueno lo que quiero saber como puedo saber que registro esta asociado a los opcodes de las intrucciones
ya que me e fijado que el opcode de las instrucciones:
INC EAX
INC EBX
INC ECX
INC EDX
todas son distintos opcodes pero como puedo saber el orden o determinar el opcode con verlo?
y tambien para las demas instrucciones?
Aprenderse TODOS los opcodes es inhumano!!!, lo puedes observar en el OllyDBG, los opcodes de cada instrucción, de igual manera si tienes instalado el masm32 en su directorio hay un *.chm con los opcodes de cada instrucción.
Nox.
No entendí muy bien pero creo que estás confundido con la estructura de las instrucciones
[ETIQUETA] NEMÓNICO [OPERANDO1],[OPERANDO2],...
La etiqueta es un valor opcional que podemos colocar
El nemónico de instrucción es la instrucción en si un ejemplo de ellas puede ser ADD, SUB, MUL, IDIV, etc
Operando es hacia que apunta el nemónico, esto quiere decir si utilizamos la Instrucción INC eax si EAX = 1, traducimos que se incrementará el registro EAX (Registro de propósito general de 32 bits).
la cantidad de operandos depende de la instrucción, por ejemplo PUSHAD, POPAD, PUSHFD, POPFD no requieren de operandos
por lo general las instrucciones que utilizan dos operandos estos poseen los siguientes nombres
ADD EAX,EBX ->EAX es el operando de destino y EBX es el operando de Origen
En cuanto a los registros de propósito general de 32 bits son los siguientes:
EAX
ECX
EDX
EBX
EDI
ESI
ESP
En cuanto a los registros de propósito general de 16 bits son los siguientes:
AX
CX
DX
BX
DI
SI
SP
En cuanto a los registros de segmentos:
CS
DS
SS
ES
FS
GS
En cuanto a su utilización, los programas en modo direccionamiento real (aquellos programas que interactúan de manera directa con el hardware de la computadora utilizan registros de 16 bits a diferencia de los programas en modo protegido que estos utilizas por defecto registros de 32 bits
Espero que sea lo que haz preguntando, en cuanto todo el contenido que te he explicado a sido el producto del estudio del mismo libro que estás estudiando tú
Saludos
@Иōҳ
Gracias bro :D lo encontre :D y esta interesante :)
@.:UND3R:.
gracias tambien :D pero mas que nada queria saber porque tengo estas intrucciones:
00401002 | FE05 1A304000 INC BYTE PTR DS:[40301A]
00401008 | 66:FF05 1F304000 INC WORD PTR DS:[40301F]
0040100F | FF05 1B304000 INC DWORD PTR DS:[40301B]
00401015 | 40 INC EAX
00401016 | 43 INC EBX
00401017 | 41 INC ECX
00401018 | 42 INC EDX
lo azules son los opcodes no? :P
los rojos son valores que no e podido entender de donde salen :/
lo verde entiendo que son las direcciones
tambien el valor 66 ni se de donde sale :/
las primeras tres instrucciones las direcciones son a variables de byte,word, y dword
EDITO:
tambien como podrais ver el OPCODE de la primera instruccion comparado con la segunda es distinto ( FE y FF )
pero comparando la segunda instruccion con la tercera son iguales :|
por eso quisiera saber si hay alguna regla para saber cuando cambia :P o en que situaciones :P
ya que dependiendo de los operandos los opcodes cambiar :/
Tiene mucho que ver "qué" es su operando, r/m32 or 64, ptr etc...
para que el opcode cambie.
Tú sólo programa en asm(mnemónicos) y deja que el micro procesador haga lo suyo (opcodes) XD.
Nox.
si bueno :P pero mas que todo lo preguntaba porque estoy tratando sobre usar los opcodes en lenguajes de alto nivel
y que en el codigo fuente de algunos ejemplos solo aparecen por ejemplo: 43h que es INC pero que
no se a que registro o direccion o tipo se esta refiriendo para hacerle el incremento :P
Por eso saber eso ahorrario mucho depurar con ollydbg :P
quieres armar una shell o algo?
xD
muy parecida es la tecnica :D por eso! :D