[C con Clase] ¿Alguien sabe destripar librerías...?

Jose Alvaro Dominguez ilgrim en gmail.com
Vie Ago 29 01:33:50 CEST 2008


> CUESTIÓN: porqué resulta que si hago un simple ejemplo que hay para empezar (ese que te trae el Dev-C++ de "Hola mundo") resulta que ocupa nadamenos que 474.990 bytes, resulta que >según esto jamás sería posible escribir algo con el amstrad o con el spectrum (los primeros tenían solo 4k) que pasa es que vamos para atrás en lugar de hacia delante, pues parece ser que >sí.


Los ejecutables, ademas de las rutinas propias de la aplicacion
incorporan informacion extra. Normalmente informacion necesaria para
ser reconocidos por el sistema operativo y poder ser ejecutados.  Es
cierto que mingw32 genera ejecutables un poco mas grandes, pero dudo
horrores que ese codigo ocupe 400KB.

El mismo codigo, compilado con gcc sin codigos de depuracion, me ocupa 4KB.
[ http://img204.imageshack.us/img204/2240/helloworldol2.png ]


> El caso es que yo ya tenía mis sospechas pero al ir empezando aprovechando estas mini vacaciones que me ha dado el trabajo, he decidido intentarlo una vez más, y resulta que a las >primeras de cambio me he quedado altamente indignado, además de por supuesto tener que tragarte numerosa documentación toda en inglés, que ya nos valdría a algún españolito o >latinoamericano el hacer alguna traducción que otra, y sobre todo me he mosqueado muchísimo al ver que el tema este de código abierto, es todo un poco menos que una gran "farsa" al final >todo está en librerías ocultas que no dejan ver ni la mitad de código que realmente va debajo de cada #include que hacemos."

Hablemos con un poco de propiedad. El codigo fuente, de las
aplicaciones libres suelen estar disponibles en las webs
correspondientes a cada proyecto. No siempre las fuentes se encuentran
empaquetadas junto a los binarios, muchas veces suelen distribuirse en
paquetes a parte para quien tiene tiempo, ganas y conocimientos de
meterle mano. Si tu quieres trastear una libreria, bajate las fuentes
de mingw32, o las de gcc, y ahi podras ver que hace exactamente cada
elemento del codigo. Lo que no me parece correcto es que sueltes algo
semejante cuando no es cierto. En cuanto a la documentacion, si la
situacion no te gusta, te animo a que la cambies dando ejemplo y
realizando la traduccion de manuales y guias. Dicen que el movimiento
se demuestra andando, aunque resulta muy comodo que nos lo traigan
todo hecho.

>"así que decidí ponerme manos a la obra con "buscar otros métodos" encontrandome gratamente con una actualización de los "viejos asm" con un super programa, el WinASM que tiene muy >muy buena pinta, de hecho el mismo ejemplo me ha dejado el ficherito del "hola que tal" en tan solo 2.886 bytes al que después de alguna optimización lo he llegado a conseguir dejar en 2.560 >bytes, todo un buen resultado comparandolo con el anterior ejemplo, el caso es que en este caso el WinASM, adolece de los mismos principios que el compilador de C, que tiene "librerías con >funciones ocultas".

Te recomendaria que te informases mejor en cuanto a los compiladores.
Algunos si son codigo cerrado y por tanto todo su codigo asi como sus
librerias son inaccesibles, pero hay otros de codigo abierto en los
que puedes trastear con ellos cuanto quieras si dispones de tiempo y
conocimientos para hacerlo. Por supuesto puedes seguir desarrollando
en asm si te apetece... eso ya es cosa tuya.

> Para mejorar esto, y en vista de que ningún debugger me resulta satisfactorio, no me ha quedado más remedio que utilizar el Visual Studio (al que me negaba tremendamente debido a que no >me gusta precisamente su política de "ocultar" para que me puedas pagar....), pero sin duda, es un debugger genial, en el que al ir dándole a la ejecución paso a paso, te va mostrando las >repetidas llamadas a funciones y más funciones"

En que quedamos? fuentes accesibles si, fuentes accesibles no? "No me
gusta mingw32 porque no puedo trastearle las librerias pero uso Visual
Studio"  Un poco de coherencia por favor. Si quieres un buen debugger,
gdb y tirando milas, aunque hay muchos otros bastante buenos.


>,"en el que creo haber contado hasta 26 ficheros abiertos, y por supuesto casi todos ellos inentendible e indescifrable para alguien que esta
 >"medio empezando"

Aprende, luego critica.

>" a pesar de ello, me he dado cuenta de que por lo visto, la salida de datos en pantalla, la toma como si fuera un fichero, en la que como "stdout" tiene la "consola", aunque >luego también es >super patético y ridículo la conversión que realiza a una supuesta tabla de caracteres UTF"

El ANSI C no contempla el UTF, la unica forma de tratar con el es
recurrir a librerias externas o a rutinas de apoyo desarrolladas por
uno mismo(o por otros) y hasta donde yo se, que no es mucho, C++
tampoco lo contempla y se tiene que proceder de igual manera. Asi pues
no me parece nada ridiculo que sucedan cosas extrañas a este respecto.
Es como echar agua al deposito de gasolina del coche y pretender que
ande.
Otros lenguajes, como por ejemplo java, si aporta clases para trabajar
con caracteres y cadenas UTF.

>" que luego encima lo pone fatal, pues resulta que en el ejemplo precisamente del >Dev-C++ resulta que en lugar de escribir "¡Hola mundo!" escribe "ÍHola Mundo" confundiendo el signo "¡" por >una i mayúscula con acento, totalmente patético.."

Esto es debido al charset del sistema. Informate al respecto.

> para todo esto se necesitan 474.990 bytes, que no, que no me lo trago, que así no se llega a ningún sitio, que no me puedo permitir comprarme ordenadores todos los días, ni megas ni discos >duros...

Los tiempos cambian y cada cosa es para lo que es. En la epoca del
Spectrum se trabajaba en Asm y basic tirando del interprete que
incorporaba. La maquina no daba mas de si y es lo que habia. Las
herramientas evolucionan y con el tiempo requieren de determinados
recursos para continuar avanzando. De todas formas, siempre puedes
servirte de las facilidades de C para desarrollar a bajo nivel
embebiendo asm en el codigo. O mejor aun, empezar a programar en
binario, con eso seguro que alcanzar un nivel supremo de optimizacion.

> En fin que si alguien me puede ayudar (preferiblemente en español) pues encantado, sino pues seguiré peleandome con los debugger y con "los supuestos servicios o APIs" o historias que >no me gustaria aprender, pero que veo que no me quedará más remedio.
> NOTA: el linux es otra batalla abandonada que tengo, puede que retome esta historia si es que veo que el seguir con las libreríass estas no tiene buen final, pero me temo, que debido a que >los supuestos "open source" no son más de lo mismo que lo que estoy viendo en programas de "código abierto" como con Dev-C++ o MinGW, que son las librerías que "intento destripar" sin >ningún éxito por cierto, y al final me he tenido que "vender al enemigo". No me gusta tener que practicar esta forma de ingeniería inversa, pero veo que no queda más remedio.

Nota: Prueba a bajarte el codigo fuente de ALGUNA aplicacion libre, en
lugar de jugar a "Jack el Destripador" y despotricar sobre algo que es
evidente que tienes una idea cuanto menos, limitada o nula. Como
sugerencia echale un ojo a esto antes de añadir alguna patada mas a
las ya expuestas:

Construyendo Mingw32 (incluye enlace a las fuentes) ->

http://www.mingw.org/node/31

Y Por supuesto, echale un ojo a esto, las fuentes de GCC, disponibles
para TODO el mundo:

Fuentes GCC ->

                      ftp://ftp.gnu.org/gnu/gcc/

Y Aqui, un monton de Software que segun tu, es un camelo porque "el
codigo fuente no es accesible":

Software libre(GNU) ->

                  ftp://ftp.gnu.org/gnu/
Las fuentes de uno de los sistemas operativos mas seguros del mundo->

ftp://ftp.openbsd.org/pub/OpenBSD/
Otro sistema operativo con fuentes disponibles->

  ftp://ftp.netbsd.org/pub/NetBSD/


Cuando lo hagas, si lo haces, veras que cuanto has soltado no tiene ni
pies ni cabeza, y carece de todo fundamento. Cuando no se sabe algo,
se pregunta y no pasa nada. Lo que no es aceptable, es hablar por
hablar, sin tener una minima idea de lo que se esta diciendo.


Un cordial saludo.


Más información sobre la lista de distribución Cconclase