Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Abloos en 14 Junio 2011, 21:58 pm



Título: punto de inicio de ejecucion de un programa
Publicado por: Abloos en 14 Junio 2011, 21:58 pm
Hola gente, estuve buscando y la verdad no encontre, puede que alla buscado mal, no se. La cuestion es la siguiente, en un programa escrito en C/C++ el punto de entrada o inicio de ejecucion es la funcion main(), ahora, ¿es posible establecer otro punto de inicio de ejecucion? o ¿como puedo saberlo? teniendo el codigo fuente. La duda surge, por que baje varios tarball con codigo fuente open source, mis intencion son ayudar, pero no tengo ni la mas minima idea de donde empezar a revisar el codigo, como para entenderlo y saber como funciona. Bueno, espero no estar preguntando una tonteria, ya que, la verdad pregunto por que no se. Les agradezco a los que contesten de ante mano.


Título: Re: punto de inicio de ejecucion de un programa
Publicado por: Queta en 15 Junio 2011, 14:28 pm
Depende del compilador y del enlazador que uses. Eso sí, aunque lo pudieras hacer no pertenecería al estándar de C/C++.


Título: Re: punto de inicio de ejecucion de un programa
Publicado por: Foxy Rider en 15 Junio 2011, 14:42 pm
@Abloos: Depende del sistema operativo y qué sea eso que bajaste (ejecutable o librería por ejemplo).
Eso es importante saberlo antes de seguir.

Saludos.


Título: Re: punto de inicio de ejecucion de un programa
Publicado por: Abloos en 15 Junio 2011, 16:59 pm
baje vario programas, pero este en particular es el escritorio liviano OpenBox. Estuve mirando por arriba el codigo y encontre una funcion main_loop. Pero no me cierra como se inicia la ejecución cuando el sistema comienza a correr este programa. Por lo que se, el sistema reconoce el tipo de ejecutable y salta al punto de inicio de ejecucion luego de realizar la carga en memoria.
Otro por ejemplo que baje fue el KMess, pero alli el codigo es un poco mas ordenado, con el uso de las librerias Qt que utilizan un tipo de bucle que es lanzado desde la función main del mismo.
Lei algunos tutos y libros sobre C/C++ pero no tratan el tema o no supe buscar, por eso me decidí a preguntar en el foro.
Y el tema de las librerias tampoco me quedo muy claro como es que funcionan.


Título: Re: punto de inicio de ejecucion de un programa
Publicado por: Foxy Rider en 16 Junio 2011, 03:33 am
baje vario programas, pero este en particular es el escritorio liviano OpenBox. Estuve mirando por arriba el codigo y encontre una funcion main_loop. Pero no me cierra como se inicia la ejecución cuando el sistema comienza a correr este programa. Por lo que se, el sistema reconoce el tipo de ejecutable y salta al punto de inicio de ejecucion luego de realizar la carga en memoria.
Otro por ejemplo que baje fue el KMess, pero alli el codigo es un poco mas ordenado, con el uso de las librerias Qt que utilizan un tipo de bucle que es lanzado desde la función main del mismo.
Lei algunos tutos y libros sobre C/C++ pero no tratan el tema o no supe buscar, por eso me decidí a preguntar en el foro.
Y el tema de las librerias tampoco me quedo muy claro como es que funcionan.

Ya veo, ya con este mensaje veo que usás GNU/Linux y hablamos de lo promedio, empezar a aprender sobre el código de un software  ... lo *normal* es tener un main (aunque sea con no más de 5 líneas llamando a un bucle en otro lado que controle la  ejecución) y normalmente hay que buscar algún archivo de nombre main.c,main.cc,main.cxx,main.cpp,etc o con el nombre del software.

También conocer las diversas formas de compilar software te puede servir para entender cómo se compila un software (y poder ver qué partes forman qué al leer la descripción de cómo se compila), sistemas como autotools, cmake, etc ...

En el caso de OpenBox, me bajé el código del repositorio de git para mirarlo y openbox está formado por varios componentes, y en el caso de openbox, el main() está en openbox/openbox.c (http://ur1.ca/4g07c) (recordá la regla de buscar archivos de nombre main o con el nombre del programa en cuestión)

De ahí tenés un punto de partida, aunque insisto, lo mejor es ver cómo se compila, por que en software que no es monolítico (léase : que no está en componentes, sino que es código que se compila ys e enlaza todo "de una") y está formado por varios componentes, podés establecer cómo se relacionan, qué depende de qué, etc ... para después zambullirte en el código con una idea general del software en cuestión.

No sé si era eso lo que preguntaste, si vá por el lado de más bajo nivel como config del compilador, rt y funciones/hooks que se usan en los diferentes sistemas al iniciar un software/cargar una librería, entonces la respuesta está acá :
http://disassembling.org.ua/6555final/lib0018.html
http://gd.tuwien.ac.at/pub/linuxgazette/issue84/hawk.html

Citar
Y el tema de las librerias tampoco me quedo muy claro como es que funcionan.

¿Qué es lo que no entendés?

Saludos.


Título: Re: punto de inicio de ejecucion de un programa
Publicado por: Abloos en 16 Junio 2011, 12:25 pm
Gracias che, entonces la función main, si hablamos de standard siempre existe en el codigo de un binario. Si mal no entiendo?. Y la parte de librerías, creo que me las voy a arreglar cuando necesite.
Si, uso GU/Linux en su distribución ArchLinux con KDE, hace unos dos años más o menos, un usuario intermedio digamos. Pero no es algo que lo ande divulgando. je.
Gracias por las respuestas che, me fueron de ayuda.