Posts in this series
- Compilar C en m$dos en nuestros tiempos
- "El paciente" a descompilar es un exe de msdos en formato MZ
La verdad es que para escalar una montaña, primero hay que tener la montaña.
Mi montaña es descompilar un videojuego (de momento uno) y liberarlo, pese a la polémica que hay con esta forma de liberar videojuegos como podéis leer en: Devilution – Decompiled Diablo 1 en el subreddit de videojuegos libres.
El juego en cuestión, ya os lo contare si lo consigo, pero como ya he empezado con los problemas, he querido ir paso a paso, y me he buscado un montecito, descompilar un C de un hola mundo.
Todo este gusanillo viene los articulos del Fanta: mierda.tv (cosas de dosbox que no tiene tags y hay que tirar de busqueda) (link actualizado en febrero 2020 ahora mierdatv esta bajo el otro proyecto de Fanta 56k) (actualización 2022: eliminado link…como Fanta es tan anti-diógenes, borra sus cosas…y desaparecen y archive no le dio tiempo a conservarlas).
A ver, quiero ser perro mordedor y poco ladrador, por eso no voy a ponerme grandes metas y voy a ver hasta donde llego.
Y lo primero que hay que hacer es tener un m$-dos entre manos, como no me apetece llamar al tito Gates y decirle que me venda unos disquetes de su apestoso sistema operativo, he encontrado el viejo y querido dosbox (no os asustéis con ese web de los dosmiles).
En casi todas las distribuciones de GNU/Linux viene en el repositorio de paquetes oficial por lo que no sera difícil instalarlo. Aunque cosa distinta es si queréis ver la matrix de m$-dos que hay que seguir el tutorial que hizo Fanta para poner el debug heavy.
Una vez instalado hay que descargar el djgpp, que es la versión del compilador libre por excelencia el Gcc para m$-dos, el proyecto tiene un formulario web para darte una lista de crípticos ficheros zip para tener el gcc funcionando según gustos personales, básicamente tienes que seleccionar:
- compilar y ejecutar programas
- C y ensamblador
- Por frikeo el Rhide
- Depurador gdb
Como podéis ver en la captura de pantalla:
Y tendrás de la descarga los siguientes ficheros zip con nombres bastante crípticos, pues tienes que descomprimirlos a una misma carpeta todos, en mi caso le puse el nombre tan original como djgpp y tendrás algo tal que así (donde todos las carpetas bin de cada zip estarán fusionadas y el resto de tipos de carpetas al igual con sus respectivos nombres):
Ahora como enganchamos el dosbox para que coja ese directorio en el path de ejecutables (si, por si no lo recordabais m$-dos tenia un invento parecido a los Unix), pues aunque se puede cambiar la configuración de dosbox para hacerlo, voy a enseñaros vía parámetros de la shell…porque así explico una parte el señor Fanta y seguir el hilo de su trabajo.
$ dosbox -c "keyb sp" -c "mount c: ." -c "C:" -c "set PATH=C:\DJGPP\BIN;%PATH%" -c "set DJGPP=c:/djgpp/djgpp.env"
Y después puedes probar cosas tan frikis como usar rhide para editar un fichero c con un hola mundo.
Recuerda, para sacar al ratón del dosbox es: ctrl + F10
Y aquí tenéis el holamundo en C para m$-dos:
En cuanto puedo os sigo mostrando los siguientes paso hasta escalar mi montaña personal.
Que maravilla :). El edit.com , el turboc, etc…
Vamos a calmarnos :P …hay que usar software libre…por eso el Rhide.
Me siento un poco tonto, pero quiero aprender a hacer lo de liberar juegos viejos.
«liberar juegos» ¿te refieres a desensamblarlos? desensamblar el juego no permite obtener el código completo del juego solo el código asm y las librerías y funciones,strings,etc.., con lo que podrás hacer «trastadas» como las que comenta fanta y modificar el juego, pero obtener el juego completo desde ingeniería inversa es arena de otro costal. Hay herramientas que ayudan en este proceso pero suelen ser especificas de los motores de los juegos y las herramientas de desarrollo del mismo. No obstante animo con el proyecto seguro que aprenderemos un montón leyéndote en el proceso ;)
Cierto cierto.
Desensamblar no hace magia, te golpea con un chorrón de asm.
Después hay que hacer el trabajo cuál arqueólogo o detective y sacar algo humano de eso.
Muchos proyectos actuales de software libre que comenzaron de esta manera han hecho este arduo trabajo. En el subredit de videojuegos libres se ha estado hablando de esta polémica, que si un juego desensamblado, pasado a C, si el juego libre final es libre o no, yo creo que si porque ya no genera el mismo binario.
Vi hace unos años la evolución de OpenRCT2 de asm a C, fue didáctico y divertido.
Si hay herramientas…¿Pero alguna libre? He probado IDA y mola aunque no entiendo la mitad.
Solo por curiosidad, ¿no se puede hacer lo mismo con Dosemu (por defecto viene con FreeDOS pero se puede cambiar por el MS-DOS si gustas)? La ventaja que tiene frente a DOSBox es que se puede usar directamente desde el terminal sin abrir una puñetera ventana aparte.
Uy gracias por el link probaré a ver.