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

xonly xonly2002 en yahoo.es
Vie Ago 29 22:29:56 CEST 2008


SD> Es bueno cuestionar los temas que estés tratando y las metodologías,
SD> pero no deberías dejar que te consuman hasta tal punto de que no puedas
SD> avanzar. Si se trata de cuestiones cruciales, entonces obviamente son
SD> dudas principales que deben ser aclaradas y resueltas, pero si son
SD> minucias, opino que eso es bastante problemático.

tal vez tengas razón, pero mi forma de pensar no la puedo controlar, si algo me da vueltas en la cabeza, no puedo seguir viendo cosas nuevas si no he entendido completamente una cosa, que se le va a hacer es mi gran problema, de hecho sino fuera por esto, probablemente habría terminado ya la carrera y no estaría dándo vueltas mil veces a lo mismo. Pero no puedo extirpar ciertas neuronas de mi cerebro.

SD> En primer lugar, esta cantidad total del fichero ejecutable proviene del
SD> trato de las bibliotecas de ANSI C++ (no las de ANSI C), en concreto son
SD> las STL: Bibliotecas de Plantillas Estándares. Dependiendo de los
SD> conocimientos que tengas, esto debería ser evidente si ya sabes acerca
SD> del tema de las plantillas (templates, en inglés).

pues no, no tengo ni idea, así que esto va con lo de las plantillas...

SD> En breve, las STL no
SD> existen como bibliotecas en su idea popular como puede ocurrir con las
SD> bibliotecas de ANSI C. Las STL no son biblitoecas compiladas, sino que
SD> son ficheros fuentes; o sea, código escrito en C++. Las bibliotecas de
SD> ANSI C sí son compiladas; o sea, son ficheros con código binario para
SD> una plataforma específica.

me estoy quedando helado, no me entero bien, un momento, releo..., sigo sin cogerlo bien, para empezar entiendo que al parecer hay que elegir en algún sitio en la plantilla lo de si escoger el ANSI C o el ANSI C++, pero lo de STL no sé muy bien a cual de ellas te estás refiriendo, aún así, se supone que estas no están compiladas, por lo que imagino que se compilan junto con tu fuente, sin embargo, precisamente eso es lo que necesito, y resulta que no veo ese cógigo en c++ por ningún lado, lo cual intuyo que en realidad es como dices, que en realidad están ya en código binario de esta plataforma en concreto, para un pc con windows. Sin embargo, se supone que yo he cogido la parte de C++, porqué no veo por ningún sitio esos ficheros con código en C++ a parte de las simples declaraciones de los .h

SD> En segundo lugar, nadie usaría C/C++ para Spectrum ni Amstrad. En
SD> cualquier caso, usaríamos Sinclair Basic para Spectrum y si mal no
SD> recuerdo Basic para Amstrad. Lo que ambos sí aceptaban, como muchos
SD> ordenadores (computadoras), era ensamblador.

ciertamente no es que quiera hacer o comparar C con lo que se usaba en aquella época, (por cierto añoro esos tiempos de PEEKs y POKE's) pero el caso es que si me encanta el aprovechamiento real 100% de toda la máquina, no había otra forma si se quería hacer algo, ahora la máquina sobra por todos lados, y no nos damos cuenta de si el programa hace lo que nosotros queremos, o hace además otras miles de millones de cosas más.

SD> Si quieres un tamaño menor, entonces puedes usar las funciones de ANSI 
SD> C, especialmente bajo MS-Windows, ya que existe una DLL con todas estas 
SD> funciones y algunas más.

me interesa no sólo que sea el tamaño mínimo, sino que además pueda yo controlar que hacer en cada momento, y con las librerías, pues mira, supuestamente en visual, me dice que "debe" hacer una supuesta conversión letra a letra del texto a utf, y yo no necesito convertir nada, directametne sé si es un fichero o un texto por consola, no necesito que compruebe esto, y eso es por culpa de la reutilización de funciones para librerías (he de decir que para la versión del visual, he cambiado el código y uso printf que es el ejemplo que me viene en muchos sitios, aunque reconozco que he de seguir mejor el curso que tenéis en la página de c conclase, pero había decidido empezar por un curso más "corto" que expliquen menos cosas, pues me conozco y le doy mil millones de vueltas a las cosas, y ya ves, casi sin comerlo ni beberlo, ala primera compilación, y así llevo más de 10 días, dándole vueltas....

SD> Por último, tienes que definir muy bien a lo que te refieres con "ir 
SD> para atrás" e "ir hacia delante". Ten presente que muchas decisiones no 
SD> solamente acerca de este tema pero cualesquier otros en la informática 
SD> se basa en la evolución. El propósito de las STL - de ANSI C++ - es el 
SD> de ofrecer facilidad de extensibilidad y establecer una base común para 
SD> cualesquier proyectos que tengas entre manos. El problema es que al 
SD> ofrecer tal extensibilidad a través de plantillas, introducimos más 
SD> código fuente "engordando" nuestro propio código fuente. Esto obviamente 
SD> implica que nuestro fichero ejecutable también crece, porque tiene más 
SD> código fuente que nosotros hemos escrito.

lo dicho, no me gusta que para hacer una cosa, la libreria me haga 20, sé que es ir contracorriente, pero que se le va a hacer, de tontos el mundo esta lleno, al parecer yo gano a todos ellos (en lo de tonto)

SD> Depende de qué documentación te refieres. Tenemos en nuestra página 
SD> versiones en español, obviamente, acerca de las funciones de ANSI C: 
SD> http://c.conclase.net/librerias/index.php  No tenemos todavía la 
SD> documentación completa de las STL, pero sí tenemos aquellas bibliotecas 
SD> que tengan que ver con los canales o flujos (streams, en inglés). Puedes 
SD> consultar el apéndice D de nuestro curso de C++: 
SD> http://c.conclase.net/curso/index.php?cap=903

ciertamente, sé que vuestra página es "demasiado completa" para mi forma de pensar, de todas formas, si algún día puedo continuar, lo haré poco a poco y revisaré vuestra página de reojo, hasta que vaya cogiendo más conocimientos y me ponga ya a rebuscar lo imposible.

SD> Esto depende de cuál compilador y bibliotecas estés mirando. Como ya he 
SD> dicho antes, las STL son código fuente, por lo que puedes mirar el 
SD> código sin problemas. Si quieres el código fuente de las bibliotecas 
SD> estándares de ANSI C o incluso del propio compilador, puedes descargar 
SD> los códigos fuentes de ciertos compiladores, como los de GNU.

al menos en mingw32 veo parte de esos códigos, de otras librerías no, en fin, si hay otros compiladores que sepas a ciencia cierta que traigan más posibilidades de libreías "abiertas" (según mi postura que es la de tener por un lado el .h y por otro la implementación de esa librería bien en c, c++ o asm)

SD> Sin embargo, tener el código fuente de las bibliotecas y de las 
SD> herramientas que usas no influye demasiado en lo que uno intenta hacer, 
SD> al menos que estés planeando en modificar las bibliotecas o las 
SD> herramientas como el compilador, el enlazador, el depurador, etc.. 

ciertamente estoy interesado más que en modificarlas, hacerme unas para mi, a pesar de que no sean tan "standard"
 
SD> Si pretendes ser un desarrollador de estas herramientas, entonces es normal 
SD> que quieras obtener sus códigos fuentes; si no, no veo que sea 
SD> tremendamente necesario tener o no tener sus fuentes.

la verdad es que me encantaría poder hacer como en las antiguas "demoscenes" en las que para mi la mejor es la "second reality" que no recuerdo muy bien si es del 1992 o del 1993 pero que es alucinante, y maneja muy muy bien la máquina, y de esa forma también se podrían utilizar las librerías para hacer juegos y demás, pues pretendo mejorar lo que se pueda...

SD> Desconozco el funcionamiento interno de WinASM, pero nuevamente, no veo 
SD> el gran problema de que no tengas a mano los códigos fuentes de las 
SD> bibliotecas. En general, esto no es necesario para el funcionamiento de 
SD> las herramientas ni de los programas que quieras hacer. Al menos que 
SD> tengas serias inquietudes por las bibliotecas, no veo que esto sea causa 
SD> de gran preocupación.

más que nada como comentaba antes, lo que pretendo encontrar es un .c para ese .h o un c++ o en su defecto un .asm pero lo que me encuentro son .lib o .dll, que no tengo posibilidades de mirar nada. Supuestamente con el fuente de mingw32 se supone que podría hacer algo, pero me gustaría encontrar algo más fácil.

SD> Eso es porque las funciones de <cstdio> no usa UTF, sino ASCII. Además, 
SD> los caracteres como los acentos, las eñes, y otros más, no forman parte 
SD> del estándar de ASCII de 7 bits. Ha habido extensiones, los cuales 
SD> aceptan estos caracteres, pero me temo que no forma parte de ASCII en sí.

en el caso de visual, utiliza sólo la librería stdio.h pero luego esta llama a otras muchas en el fichero write.c se hace una conversion letra a letra de lo que se ha pasado a utf8 o a utf16 e incluso creo recordar que en algún sitio puede poner algo de ascii, pero no lo tengo muy claro, la verdad es que me he "destripado" muchas librerías, el caso es que he copiado todas estas librerías en el fuente, y no consigo compilar adecuadamente, pues resulta que las funciones al compilarlas, ya las tiene el "nombradas" así que sigo intentado averiguar de donde me faltan "más funciones"

SD> No estoy seguro si sigues hablando de averiguar el "código interno" de 
SD> las funciones. Si es así, vuelvo a repetir que esto no es necesario para 
SD> programar. Uno usa las herramientas que tiene a su disposición para 
SD> poder llevar a cabo sus propios proyectos. Si las cuestionas al detalle, 
SD> es posible que entiendas algo más acerca de cómo fueron creadas, pero a 
SD> su vez perderás todo ese tiempo que podrías haber invertido en 
SD> desarrollar tu proyecto.

ciertamente tienes razón, y puesto que estoy demasiado verde en programar en C, pues intentaré tomarme los huecos libres que tenga para ir aprendiendo algo básico, y luego intentaré meterme más en profundidad con lo de c conclase, pero sé que el tema dará muchas vueltas en mi cabeza.

SD> La verdad es que no veo esta gran necesidad de "ingeniería inversa". Las 
SD> bibliotecas son una herramienta más, que las usamos para nuestros fines.
SD> Sinceramente, tengo que comentar que pareces algo obsesionado con el 
SD> hecho de que no sepas exactamente al detalle lo que hacen las funciones. 
SD> Puedo entender si tienes curiosidad, pero por lo que he leído, parece 
SD> más obsesión que el propio deseo de conocimiento.

la verdad es que como decía, cuando se me mete algo entre ceja y ceja, o lo saco o reviento, y no sé si saldrá bien mi comentario de respuesta al compañero anterior, pero comentaba que en un programa que nos estubimos "picando" en la universidad, al final se redujo de una duración de algo más de 4 horas y media a unos 13 segundos, con lo cual ME INTERESA MUCHO INDEPENDIZARME de las librerías estandar.

SD> También veo que no entiendes fundamentalmente la idea del "código 
SD> abierto". El hecho de ofrecer el código fuente por parte de los 
SD> desarrolladores no es para aquellos que quieran aprender a programar. 
SD> Ofrecer el código fuente era para que aquellos otros desarrolladores con 
SD> otros sistemas y plataformas puedan adaptar el programa o la biblioteca 
SD> a su plataforma y posiblemente a sus necesidades. En otras palabras, la 
SD> idea del código abierto fundamentalmente fue concebida por y para 
SD> desarrolladores. Los demás que somos usuarios nos interesa muy poco, si 
SD> funciona claro está.

el caso es que veo que hay muchas cosas que no funcionan como me gustarían, y por ello al final necesito algo que funcione no sólamente correctamente como dices, sino que además lo haga especialmente rápido, y tengo en mente "que hay una conspiración" para que esto solo funcionen con máquinas nuevas (en fin me pongo peliculero en la época de la guerra fria o bueno no sé si entendéis mi simil), pero la realidad es que creo que muchas cosas fallan o no se hacen lo suficintemente bien porque se usan librerías que hacen cosas a las que el programador bien por error o bien por inexperiencia o por imprevisión, mete la gamba a la hora de querer utilizar lo mismo para muchas cosas, sé que sino fuera gracias a eso, otras muchas  no se podrían haber llegado, pues creo que en este momento se abusa de la reutilidad de las librerías, en lugar de usarlas para los tareas convenientes, el caso es que puesto que todo el mundo va en otra dirección, hace mucho tiempo que la ola me arolló y aún estoy intentando despejarme, siendo fiel a mis principios, para hacer esto quiero hacer esto, y no 20 cosas más. Además quiero hacerlo cuando yo quiera, no cuando le dé la gana a otro... (proceso o programa se entiende...)

SD> Mi consejo es que aprendas a programar primero, si es lo que te 
SD> interesa. Cuando tengas bastante experiencia en programar, ya te puedes 
SD> dedicar a otros temas y afrontarlos, como puede ser todo este tema del 
SD> funcionamiento interno de las bibliotecas, porque entonces estarás más 
SD> preparado que ahora.
SD> En fin, espero que haya aclarado algunos temas que mencionas.
SD> Steven


seguré tus consejos, al menos en intenciones, pero no aseguro nada, probablemente me tire más de una noche sin dormir....


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