Saltar al contenido

Convertir ASM a C (sin ingeniería inversa)

Este grupo redactor ha estado mucho tiempo buscando la respuesta a tu duda, te dejamos la respuestas por eso nuestro objetivo es resultarte de mucha apoyo.

Solución:

Absolutamente puede hacer un programa de CA desde el ensamblador. El problema es que puede que no se parezca a lo que estás pensando, o tal vez lo parezca. Mi PIC está oxidado pero usando otro ensamblador, digamos que tenía

add r1,r2

En C, digamos que se convierte en

r1 = r1 + r2;

Posiblemente más legible. Pierde el sentido de los nombres de las variables, tal vez porque los valores saltan de la memoria a los registros y viceversa, y los registros se reutilizan. Si está hablando de las fotos más antiguas que tenían dos registros, un acumulador y otro, bueno, en realidad podría ser más fácil porque las variables estaban en la memoria en su mayor parte, mira la dirección, algo así como

q = mem[0x12];
e = q;
q = mem[0x13];
e = e + q;
mem[0x12] = e;

Largo y prolongado, pero está claro que mem[0x12] = memoria[0x12] + memoria[0x13];

Estas ubicaciones de memoria son probablemente variables que no saltarán como el código C compilado para un procesador con un montón de registros. La imagen puede hacer que sea más fácil averiguar las variables y luego hacer una búsqueda y reemplazarlas para nombrarlas en el archivo.

Lo que buscas se llama static traducción binaria, no necesariamente una traducción de un binario a otro (un procesador a otro), pero en este caso una traducción de pic binary a C. Idealmente, querrá tomar el ensamblador proporcionado en la nota de la aplicación y ensamblarlo en un binario usando las herramientas del microchip, luego haga la traducción. También puede hacer una traducción binaria dinámica, pero es aún menos probable que encuentre uno de esos y normalmente no da como resultado C, sino un binario a otro. ¿Alguna vez se preguntó cómo funcionan esos joysticks de $ 15 en wal-mart con pac-man y galaga? La rom de la sala de juegos se convirtió usando static traducción binaria, optimizada y limpia y el C o cualquier lenguaje intermedio compilado para el nuevo procesador de destino en la caja portátil. Me imagino que no todos se hicieron de esta manera, pero estoy bastante seguro de que algunos sí.

La pregunta del millón, ¿puedes encontrar un static traductor binario para una foto? Quién sabe, probablemente tengas que escribir uno tú mismo. Y adivine lo que eso significa, escribe un desensamblador, y en lugar de desensamblar una instrucción en la sintaxis nativa del ensamblador como agregar r0,r1, tiene su desensamblador impreso r0=r0+r1; Para cuando termine este desensamblador, sabrá tan bien el lenguaje ensamblador pic que no necesitará el traductor de asm a C. Tienes un problema con el huevo y la gallina.

Conseguir el exactamente el mismo el código fuente de un programa compilado es básicamente imposible. Pero los descompiladores han sido un área de investigación en informática (por ejemplo, el descompilador dcc, que fue un proyecto de doctorado).

Hay varios algoritmos que se pueden usar para hacer coincidencias de patrones en código ensamblador y generar código C equivalente, pero es muy difícil hacer esto de una manera general que funcione bien para todas las entradas.

Es posible que desee consultar Boomerang para un esfuerzo de código abierto semi-reciente en un descompilador generalizado.

Una vez trabajé en un proyecto en el que una parte significativa de la propiedad intelectual eran algunos algoritmos serios codificados en código ensamblador x86. Para transferir el código a un sistema integrado, el desarrollador de ese código (no yo) usó una herramienta de un equipo llamado MicroAPL (si no recuerdo mal):

  • http://www.microapl.co.uk/asm2c/index.html

Me sorprendió mucho lo bien que funcionó la herramienta.

Por otro lado, creo que es una de esas cosas del tipo “si tienes que preguntar, no te lo puedes permitir” (sus rangos de precios para una conversión única de un proyecto equivalen a alrededor de 4 líneas de ensamblaje procesadas por un dólar).

Pero, a menudo, las rutinas de ensamblaje que obtiene de un proveedor se empaquetan como funciones que se pueden llamar desde C; por lo tanto, siempre que las rutinas hagan lo que desea (en el procesador que desea usar), es posible que solo necesite ensamblarlas y más o menos olvídate de ellos, son solo funciones de biblioteca a las que llamas desde C.

Recuerda que te brindamos la opción de decir si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *