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

xonly xonly2002 en yahoo.es
Vie Ago 29 23:43:12 CEST 2008


bueno, veo que mi respuesta anterior a tu mensaje no ha salido, así que intentaré escribir más o menos lo mismo...., gracias antes de nada.

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

si tienes el Dev-C++ y te metes en la carpeta de EXAMPLES y luego HELLO, hay un fichero dev, al darle a compilar y ejecutar, sale el mostruo "del lago ness", en fin que no hay trampa ni cartón.

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

veo que usas linux, seguramente es mucho mejor opción que seguir con windows, pero debido a mi falta de tiempo, no he podido ponerme en serio con linux, y he tenido que formatear los discos en al menos 6 ocasiones que lo intenté por razones diversas cada una de ellas...

JAD> Hablemos con un poco de propiedad. El codigo fuente, de las
JAD> aplicaciones libres suelen estar disponibles en las webs
JAD> correspondientes a cada proyecto. No siempre las fuentes se encuentran
JAD> empaquetadas junto a los binarios, muchas veces suelen distribuirse en
JAD> paquetes a parte para quien tiene tiempo, ganas y conocimientos de
JAD> meterle mano. Si tu quieres trastear una libreria, bajate las fuentes
JAD> de mingw32, o las de gcc, y ahi podras ver que hace exactamente cada
JAD> elemento del codigo. Lo que no me parece correcto es que sueltes algo
JAD> semejante cuando no es cierto.

Ciertamente tienes razón, los fuentes van a parte, pero de lo que me quejo amargamente es de que no existe la posibilidad de pillar la implementación de las librerías tal cual, es decir la de tener del fichero .h su correspondiente .c .c++ o su .asm el cual seguro que han debido "cojer" o fabricar de alguna manera, pero he sido incapaz de encontrar una línea ni tan siquiera que me indique como construir por ejemplo el printf de la librería studio.h sólo sé como utilizarlo, pero que pasa si yo quiro hacerme una función que haga algo similar pero la quiero hacer yo sin depender de stdio (u otra similar), ese es mi problema. Acaso en ASM no puedo manejar yo el ordenador a mi antojo sin utilizar librerías, donde está la información para ello, toda la tienen las librerías pero cerradas con candado.

JAD> En cuanto a la documentacion, si la
JAD> situacion no te gusta, te animo a que la cambies dando ejemplo y
JAD> realizando la traduccion de manuales y guias. Dicen que el movimiento
JAD> se demuestra andando, aunque resulta muy comodo que nos lo traigan
JAD> todo hecho.

tienes toda la razón del mundo, de hecho lo que intento como decía es hacerme mis propias librerías, sin depender de esas "standar" pero que si a la gente no les gusta, pues que las puedan cambiar tranquilamente, y sobre todo, con eso de traducción no me limito al tema de documentación, mi meta sería poner todo en español, a excepción de la parte de librerías que tenga en ensamblador, todo lo demás, a pelo traducción al canto, empezando por el propio MAIN, de hecho me estoy tomando esta toma de contacto con el C, como la la semilla de un futuro pseudolenguaje, en el que aquellos que tengan que empezar otra vez a intentar aprender programación, no tengan que además de aprender a programar, tengan que estudirar 2 lenguajes a la vez, el inglés y el propio del compilador. Para ello, voy poniendo mis seguiientos, avances y desastres en mi página web, pero que frente a esta de c conclase, y sobre todo por mi estado en pañales prácticamente de todo, me da vergüenza incluso indicarla aqui, pero que espero algún día pueda "ser mirada" para todo aquel que tenga interés.

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

la verdad es que he probado poco, pero me gusta mirarme todo a fondo, y la verdad sabía que me exponía en sério a un gran problema y es que windows no deja casi nada "abierto", pero sabiendo que hay muchas cosas con "código libre" ya también para windows, pues me he decidido a intentarlo, el caso es que sinceramente esperaba que los compiladores estos tubieran las librerías "abiertas" como yo quiero, y resulta que los de Dev-C++ se encomiendan al mingw32, este trae algo, pero no todo y al final todos han de pasar por el haro de windows, y es que me revienta que en el mundo de la programación se haga como en el de la construcción, para hacer algo, yo se lo pido a otro, este a otro, el otro a otro, y al final lo hace el que menos idea tiene y peor lo puede hacer... por supuesto estoy hablando de windows.

JAD> En que quedamos? fuentes accesibles si, fuentes accesibles no? "No me
JAD> gusta mingw32 porque no puedo trastearle las librerias pero uso Visual
JAD> Studio"  Un poco de coherencia por favor. 

el tema es que como imaginarás para mi microsoft es el enemigo, pero he de admitir que su debugger es de lo mejorcito que he visto en mi vida, a pesar de que tiene muchísimas cosas que mejorar, pero tiene opciones que otros ni las huelen, y sobre todo me encanta eso de que al ir paso a paso (al darle con F11) te pueda ir abriendo una a una todas las librerías, a excepción de algunas que bueno, al final las sigue protegiendo a muerte, pero este si tiene más "partes fuentes" y te va abriendo los ficheros, en los otros que he visto simplemente se remiten a ir recorriendo el programa fuente, e ir dando la información de las variables, este va más allá e incluso te saca en desensamblador del ejecutable, y bueno en fin, que a partir de aqui sé que puedo ir sacando cosas, pues simplemente habro, copio y pego en mi fuente, y voy viendo que se me reduce el ejecutable, que ya va por 3,5 kb, pero sé que se puede seguir mejorando, pero sobre todo me gustaría saber para esto, hay que poner esto en asm, para lo otro, esto otro, y dejarse de chorradas...

JAD> Si quieres un buen debugger,
JAD> gdb y tirando milas, aunque hay muchos otros bastante buenos.

la verdad, es lo que comentaba antes, si crees que hay alguno mejor, me comentas, el gdb, pues bien pero eso, solo mira el fuente y punto.

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

ciertametne me queda muchísimo por aprender, pero cuando veo que algo no me cuadra, no cuadra y punto. No es normal que para apretar un tornillo haya que llamar a 26 personas, pero visto lo visto, ya me lo creo todo, lo malo es que nadie se da cuenta de que esto no es normal, por muchos millones de instruciones por segundo que un micro pueda ejecutar, si en lugar de tener que ejecutar 400.000 ejecuta solo 20 prefiero la solucion de 20 aunque no haya podido notar la diferencia con mi segundero...

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

ciertamente tienes toda la razón del mundo, por eso no me gustan las librerías, y es precisamente lo que se hace en la función _write del fichero write.c que es uno de los múltiples que abre el visual cuando meto el código en visual, que evidentemente en Dev-C++ no creo que haga pues falla lo de la "¡" pero que me resulta totalmente absurdo al igual que a ti.

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

nno creo que haya ningún curso de binario, pero desde luego lo que si me gustaría es poder prescindir poquito a poco de las librerías standar, que sólo meten código inservible, pues al ser reutilizables, se usan para multitud de historias, con el mismo código, si ya sé que es contracorriente, pero es lo que me gusta, hacer lo que los demás no hacen.

JAD> Nota: Prueba a bajarte el codigo fuente de ALGUNA aplicacion libre, en
JAD> lugar de jugar a "Jack el Destripador" y despotricar sobre algo que es
JAD> evidente que tienes una idea cuanto menos, limitada o nula. Como
JAD> sugerencia echale un ojo a esto antes de añadir alguna patada mas a
JAD> las ya expuestas:
JAD> Construyendo Mingw32 (incluye enlace a las fuentes) ->
JAD> http://www.mingw.org/node/31

las de mingw ya las tengo, y estoy mirando, pero como decía antes, no viene todo todo y todo, en fin, yo es que cuando estaba en la facultad, nos picamos un compañero y yo a ver quien era capaz de hacer un código que dibujara 256.000 circunferencias con un radio aleatorio de 10 a 100 puntos cada una, y en las primeras pruebas con un 486 que teníamos ambos, él lo hizo con pascal, y yo con modula, gracias a que un día pude pillarme por un fallo de seguridad de la facultad, los códigos en ensamlador de las librerías que tenía en su época el top-speed que era el compilador utilizado, y resulta que para ir tomando medidas, probamos como punto de partida las librerías standar, y luego, nosotros mejoraríamos nuestras cosas a nuestra manera, y resulta que de algo más de 4 horas y media que duraba en mi ordenador, pues las librerías estandar de modula son nefastas, y algo más de 3 horas en su caso, al final yo pude poner el programa con tan sólo 13 segundos todo un record, que seguramente podríamos haber mejorado, pues el colega este era un cerebrito y prácticamente las mejores mejoras de código para poder hacer las circunferencias, vinieron de su parte, pero al final, en modula salió ganando gracias a que pude ponerlo todo en mi código, y no el ir poniendo punto a punto la circunferencia, o haciendo la circunferencia con sus cálculos de senos y cosenos.

JAD> Y Por supuesto, echale un ojo a esto, las fuentes de GCC, disponibles
JAD> para TODO el mundo:
JAD> Fuentes GCC ->
JAD>                       ftp://ftp.gnu.org/gnu/gcc/
JAD> Y Aqui, un monton de Software que segun tu, es un camelo porque "el
JAD> codigo fuente no es accesible":
JAD> Software libre(GNU) ->
JAD>                   ftp://ftp.gnu.org/gnu/
JAD> Las fuentes de uno de los sistemas operativos mas seguros del mundo->
JAD> ftp://ftp.openbsd.org/pub/OpenBSD/
JAD> Otro sistema operativo con fuentes disponibles->
JAD>   ftp://ftp.netbsd.org/pub/NetBSD/
JAD> Cuando lo hagas, si lo haces, veras que cuanto has soltado no tiene ni
JAD> pies ni cabeza, y carece de todo fundamento. Cuando no se sabe algo,
JAD> se pregunta y no pasa nada. Lo que no es aceptable, es hablar por
JAD> hablar, sin tener una minima idea de lo que se esta diciendo.
JAD> Un cordial saludo.

sin duda sé que mi futuro ha de ir andando por alguna historia de estas, el caso es que ahora tengo miedo de que realmente en esos sistemas también haya códigos y cosas "ocultas", espero que todo sea un susto

como decía al principio, muchísimas gracias por las críticas y por los intentos de ayuda, pero es que estoy loco, y probablemente todo esto sea una gran locura, pero es lo que quiero y me gusta hacer, si sale a buen puerto, imagino que todos seremos veneficiados, sino, pues simplemente sevillana de electricidad (es de Endesa) se hará con una buena cuenta por tener tantas horas mi ordenador encendido.... 


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