Hola Orubatosu muchas gracias por responder esa parte ya la entendía pero la que no entiendo es que por ejemplo cojo entro aquí:
https://github.com/rapid7/metasploit-frameworkComo puedo ver el primer archivo que programaron para ir enlazando todo y ver como se estructura viendo las librerías que importa y en que momento utiliza las funciones y todo eso, no se si me explico
Saludos
Eso está hecho en Ruby, lo que quiere decir que antes como mínimo deberías tener conocimiento medio de ese lenguaje. Hoy en día hay muchas herramientas para la automatización del despliege de las aplicaciones (proceso requerido para que éstas empiecen a funcionar), normalmente cada lenguaje tiene un conjunto de herramientas que te permiten hacerlo. Esas herramientas suelen tener archivos de configuración que te permiten ver cómo está estructurado ese proceso, algo que te puede aclarar mucho las cosas sobre dónde está el punto de entrada de las mismas.
De todas maneras lo que pides es complicado si no hay documentación de por medio o si el software es muy grande, en ese proyecto han contribuido 400 personas, como supongo que intuirás, habrá gente que no tiene ni idea de cómo está hecha otra parte de la aplicación. Si en el desarrollo de aplicaciones cada programador tuviera que saber cómo está implementado cualquier otro módulo, el desarrollo de software no sería factible, ni en tiempo, ni en coste. De hecho lo tuyo es aún más complicado, estás intentando entender la arquitectura de un software realizándole Ingeniería Inversa al código.
En C++ lo que más se usa son las
https://es.wikipedia.org/wiki/GNU_build_system . Y por todo esto que te cuento es tan importante la Ingeniería del Software hoy día, poner de acuerdo a tantísima gente no es fácil.
No es por desanimarte, pero digo que para entender un software al completo te debes dedicar por completo a estudiarlo, y si no tienes a nadie que te introduzca en el tema y no hay documentación, puedes morir en el intento.
Además para cada lenguaje de programación, o ellos mismos u otras empresas establecen guías de estilo, que pueden ir desde convenciones para el nombrado de variables, métodos y clases hasta los nombres y la organización de las carpetas.
EDIT: De hecho se usan patrones de diseño de software, patrones para la arquitectura como el MVC (Modelo Vista Controlador) que está por todos lados. Aunque parezca que no, te aseguro que si metes a 20 personas en una habitación a trabajar conjuntamente en un software, únicamente picando código cada uno por su lado seguramente habrá un 99% de probabilidades de que la aplicación falle en su despliege.
Saludos.