2010-03-09 24 views
8

expertos, me pregunto si la conversión de la máquina intel x86Código/código de ensamblaje es única ¿Una o ambas caras?código de la máquina de intel a la pregunta del código de ensamblaje

means: assemblyCode ---> machineCode y machineCode ---> assemblyCode están disponibles.

dado que el código de máquina x86 varía en tamaño (1-15 byte), y el código de operación varía en (1-3 byte), ¿cómo determinar que un código de operación es de 1 byte o 2 byte o 3 bytes?

y nunca encontré el ejemplo del prefijo de las instrucciones x86, si aquí está el prefijo de 1 byte, ¿cómo determinar si es prefijo u opcode?

Ciertamente, el código de ensamblaje ---> machineCode, la identidad de mnemónicos + oprand [w/b] puede determinar cuál es el código de máquina de respuesta al mapear cierta MappingTable.

pero, cuando el proceso se invierte:

{bbbbbbbb, bbbbbbbb, bbbbbbbb, // Instrucción1 bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, // Instrucción2 bbbbbbbb, bbbbbbbb // instruction3 }

----> {bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb, bbbbbbbb}

no sé que es los bits o byts significativos para determinar cuánto tiempo (qué tamaño) un instrumento ction es.

¿alguien me dice cómo determinar eso? (El tamaño del código de operación, el ejemplo del prefijo) gracias por la ayuda.

Respuesta

3

Los detalles que necesita están en Intel® 64 and IA-32 ArchitecturesSoftware Developer’s Manual Volume 2B: Instruction Set Reference, N-Z. Mira el Apéndice A, incluye todo lo que necesitas.

+0

gracias, lo buscaré. – Johnny

+0

gracias, he leído: Tabla A-2. Mapa de Opcode de un byte: (00H - F7H) 0F LOCK (Prefijo) Tabla A-3. Mapa de Opcode de dos bytes: 00H - 77H (First Byte es 0FH) Tabla A-3. Mapa de Opcode de dos bytes: 08H - 7FH (First Byte es 0FH) Tabla A-3. Mapa de Opcode de dos bytes: 80H - F7H (Primer byte es 0FH) Tabla A-3. Mapa de Opcode de dos bytes: 88H - FFH (Primer byte es 0FH) – Johnny

+0

Tabla A-4. Mapa de Opcode de tres bytes: 00H - F7H (los primeros dos bytes son 0F 38H) Tabla A-4. Mapa de Opcode de tres bytes: 08H - FFH (los primeros dos bytes son 0F 38H) Tabla A-5. Mapa de Opcode de tres bytes: 00H - F7H (Los primeros dos bytes son 0F 3AH) Tabla A-5. Mapa de Opcode de tres bytes: 08H - FFH (los primeros dos bytes son 0F 3AH) es muy útil, gracias. – Johnny

3

No estoy seguro de lo que quiere lograr, pero como las instrucciones tienen longitud variable, la única forma de asegurarse de recuperar el código correctamente desensamblado es comenzar desde una dirección de inicio conocida. Por lo general, los desensambladores comienzan desde el punto de partida del programa y luego desensamblan recursivamente todos los métodos llamados.

Sin embargo, esto lleva a situaciones donde algunos fragmentos de código no se desmontan porque se pueden invocar desde una tabla de funciones o situaciones similares, por lo que necesita ayuda de un humano para ver si las secciones restantes son código o datos.

+0

... ¿esto concierne por el duende u otro formato obj? – Johnny

+0

sí, desmontar ---> olvidé usar estas palabras. creo, si puedo desmontar, entonces puedo ensamblar. – Johnny

+0

Esto se puede aplicar a cualquier formato de objeto, pero, por supuesto, el procesamiento debe tener en cuenta el formato real del archivo. – rslite

2

desde la machineCode x86 es varían en tamaño (1-15 byte), y código de operación varían en (1-3 byte), la forma de determinar un opcode es 1 byte o 2byte o 3byte?

El tamaño de las instrucciones está implícitamente definido por instrucción y modo de dirección, tendrá que verificar el byte de un byte de ISA a la vez lo que puede y debe seguir dicho byte.

y nunca me encontré con el ejemplo de prefijo de instrucciones x86, si aquí se prefijo de 1 byte, la forma de determinar que es prefijo o código de operación?

Por ejemplo, el prefijo de anulación de tamaño de operando (66h) siempre es un prefijo.

+0

gracias, ¿podría escribir un prefijo completo + opcode + modo + r/m + oprands ejemplo? – Johnny

+0

¿qué hay del tamaño del código de operación? (no las instrucciones), – Johnny

+0

El manual del Conjunto de Instreuction de Intel tiene tablas extensas de la codificación de los códigos de operación y el byte mod-reg-r/m. Consulte el Capítulo 2 de este documento, por ejemplo: http://www.intel.com/design/intarch/manuals/243191.htm –

Cuestiones relacionadas