PDA

Ver la Versión Completa : como pasar de asm a hexadecimal?


javier20
07-10-2007, 22:03:39
hola navegando por la red me encontre con un codigo que me llamo mucho la atencion y aun no logro comprender:



const
SectionCode: Array[0..6] of Byte = (
$B8, $00, $00, $00, $00, // MOV EAX, $00000000
$FF, $E0); // JMP EAX



por lo que veo primero mueve en el registro EAX la direccion 00000000h y despus salta a la misma.

en cuestion el codigo es solo este:

asm
mov eax, $0000000
jump eax
end;

pero mi pregunta es como paso esos valores en asm a hexadecimal?

aeff
07-10-2007, 22:46:01
pero mi pregunta es como paso esos valores en asm a hexadecimal?


HOLA javier20, ¿no entiendo que quieres decir con pasar esos valores de asm a hexadecimal?, querrás decir que quieres convertir en ASM valores decimales por ejemplo a hexadecimal, ¿por que no explicas mejor lo que quieres?

saludos,
aeff!!

javier20
08-10-2007, 00:26:43
segun el codigo que poste, se pueden ver claramente los valores de array que estan en HEX (0..9 A..F), y aqui va mi pregunta es que me gustaria saber por que el autor de dicho codigo se molesto en pasar dichos valores mencionados arriba que estan en ensamblador(se puede ver por los comentarios) a codigo hexadecimal (se puede ver que esta antepuesto el operador $ ), esta programa es para camiar el EntryPoint de otra aplicacion si quieres puedo postear el programa completo no hay problemas. yo pienso que es como un stub o algo asi, que mas adelante lo escribe en el programa destinado.

se entiende
lo que digo? :)

saludos

aeff
08-10-2007, 02:58:08
saludos, yo no tengo muchos conocimientos de ASM pero he hecho algo en este proderoso lenguaje, si pudieras postear el codigo del programa puede que lleguemos a alguna conclusión...

de todas formas, no se para que se utiliza ese array, pero puedo ver que hay elementos de el que forman parte del resultado final en el que se convierte el codigo en ASM que escribiste mas para abajo, es decir, cuando en ASM escribes un programa usando las instrucciones MOV, JUMP , etc... y haces referencia a los registros EAX, etc... esto af final se transforma en un codigo hexadecimal y luego en binario, es decir:

B800000000 => mov eax, $0000000
FFE0 ......... => jump eax

¿me entiendes lo que te quiero decir?, de todas formas lee el documento que te dejo adjunto.

saludos
aeff!!

aeff
08-10-2007, 03:07:24
adjunto esta un documento con apuntes de ASM

ixMike
09-10-2007, 19:39:08
Bueno, aunque no sé programar en ensamblador, sí que sé qué es.

Pongamos un segmento de lenguaje máquina (binario) al azar, por ejemplo:

0001 0100 0101 0110 0111 1001 0100 1001 0101 0110 1011 1011

Bien, pues ensamblador lo que hace es coger un grupo de bits (creo recordar que 8, un byte) y darle un nombre, es decir, la instrución jmp corresponde con ocho bits (no sé cuales son, supongamos 0101 0110), a la instrucción eax le pone otro (0100 1001), y así.

Pues bien, resulta que cada grupo de 8 bits que corresponde con una instrucción en ensamblador también se puede representar con dos cifras hexadecimales. Así, lo que antes he escrito en binario es ahora en hexadecimal

14 56 79 49 56 AA

Entonces, cada instrucción en ensamblador se puede representar mediante dos cifras hexadecimales u ocho cifras binarias.
Para traducir de hexadecimal a ensamblador sería cuestión de buscar un poco en internet.

Espero que te sea de ayuda.

Salu2.