#1 Le 02/08/2007, à 15:34
- volkukan
reverse engineering ou comment "tracer" l'execution de blender
Boujours, je suis un amateur de programmation, mon prog le plus long devait comporter environs 1000 ligne en C++ et en C.
J'aimerai comprendre le mode de fonctionnement des programmes que j'utilise comme par exemple blender ecrit en c a plus de 80%, ainisi je me suis dis pourquoi pas regarder le code source composé de 2000 fichiers .
Le pire c'est que je l'est fait et desesperement j'ai cherché a trouver la fonction main() puis ensuite essayer de suivre les appels de fonctions ect...
Evidement, au bout de 2jours c'est l'abondon et on se dit que les experts en programmations qui arrivent a ci retrouver sans même utiliser une documentation par la technique du reverse engineering sont doté de capacité intelectuel hors norme.
Or un jours jsui tombé sur un site expliquant qu'il existe des programmes capable de tracer l'execution d'un autre programme c'est a dire pouvant afficher l'ensemble des fonctions qui s'execute apres ouverture du programme jusqua sa fermeture. Aussi capable, de donner l'etat d'une variable, le temps passer dans une routine enfin bref un programme qui automatise ce que j'ai chercher à faire à la main d'où ma stupefaction et j'ai compris que dans mon petit linux il y a des outils dont je n'avais pas du tout entendu parler qui aide pour un debuggage precis.
A part gdb qui fonctionne pas concernant blender car en effet j'utilise un blender installé via le module apt donc j'enclenche gdb en le tapant en ligne de commande puis ensuite je tape run blender mais rien du tout
D'un autre coté blender n'a pas de bug donc je vois pas l'interet d'ou la question.
Comment faire pour tracer l'execution de ce programme afin que je puisse avoir accés au fonction utilisées durant le lancement et si possible avec l'emplacement dans leurs fichier respectives.
Merci
Dernière modification par volkukan (Le 02/08/2007, à 16:12)
Hors ligne
#2 Le 02/08/2007, à 15:36
- Vegetable
Re : reverse engineering ou comment "tracer" l'execution de blender
Salut,
compile le en débug, puis lance gdb dessus avec un breakpoint sur main. (ton blender actuel n'est pas compilé en débug)
Dernière modification par Vegetable (Le 02/08/2007, à 15:38)
Hors ligne
#3 Le 02/08/2007, à 15:41
- volkukan
Re : reverse engineering ou comment "tracer" l'execution de blender
Ok donc pas moyen de debuger si je les pas compiler dans un mode precis chose que apt n'a pas fais j'imagine.
Une fois que cela aura été fait comment fait on pour placer un break point sur la fonction main???
si jy arrive je pourrais suivre pas a pas l'ensemble des fonctions qui seront appelée???
L'idéal, (peut-être que je reve un peu mais osons toujours) serait que j'ai une console qui affiche l'évolution des fonctions appelées par blender, une autre qui affiche le fichier source où est implementé la fonction et enfin la dernière où il y a le programme.
merci de repondre aussi rapidement:D
Hors ligne
#4 Le 02/08/2007, à 15:43
- cduray
Re : reverse engineering ou comment "tracer" l'execution de blender
Bonjour,
Une autre technique assez simple pour comprendre grosso modo ce que fait un programme et comment il le fait est de suivre les system calls:
truss ou strace, selon l'OS.
C
Hors ligne
#5 Le 02/08/2007, à 15:47
- volkukan
Re : reverse engineering ou comment "tracer" l'execution de blender
Merci pour la reponse, je vais chercher des infos truss, donc a vous entendre ce que je dis est un classique pour un programmeur lambda....
Mais concernant, ma methode des 3 fenetres est ce possible de faire travailler 3 consoles en même temps????
Hors ligne
#6 Le 02/08/2007, à 15:48
- AuraHxC
Re : reverse engineering ou comment "tracer" l'execution de blender
strace ouai.
Sinon avec GDB si tu compile avec les options de debuggage tu peux savoir un tas de truc -> fonction appelé, valeur des variables, l'état de la pile etc...
Donc après tu regarde un tuto sur GDB parce que j'ai plus en tête tous sur GDB... je sais qu'il y a commande b (breakpoint), where (savoir ou tu es), run, print, l (pour la ligne me semble t'il), bt (pour voir la pile)... j'ai que ca en tête a ce moment précis
Hors ligne
#7 Le 02/08/2007, à 15:56
- volkukan
Re : reverse engineering ou comment "tracer" l'execution de blender
je lis que strace affiche que les appels systeme or un appel système est un appel à une fonction fait par une fonction de la bibliothèque C à l'attention du noyau LINUX donc sa marche si blender execute des fonction à l'atention du noyau or moi je veux les fonctions à l'atention de blender même.
Concernant truss, sur le forum il n'a jamais été cité une seul fois a par dans ce post puis-je en savoir davantage????
Dernière modification par volkukan (Le 02/08/2007, à 15:59)
Hors ligne
#8 Le 02/08/2007, à 16:00
- AuraHxC
Re : reverse engineering ou comment "tracer" l'execution de blender
Un truc qui me vient à l'esprit c'est un logiciel open-source donc tu chope le code source http://www.blender.org/download/source-code/ et apres tu le compile a la main avec les options de debug et apres tu utilise GDB.
Enfin c'est une idée comme une autre
Hors ligne
#9 Le 02/08/2007, à 16:04
- cduray
Re : reverse engineering ou comment "tracer" l'execution de blender
volkukan: truss est l'équivalent de strace pour solaris (mais vu que je confonds les deux, quand je cite l'un, je cite l'autre).
Si tu veux vraiment voir par où passe ton programme, gdb est un must.
Hors ligne
#10 Le 02/08/2007, à 16:12
- volkukan
Re : reverse engineering ou comment "tracer" l'execution de blender
Donc on y va pour une compilation de blender, pour ceux à qui ça interesse blender est un logiciel vraiment puissant dont les mise a jours ce font à la hauteur de 3 par an et l'arrivé de la version 2.5 avant la fin de l'année promet plein de belle chose.
Alors autant essayer de participer à sont evolution.
Je posterais la façon de compiler le programme ++:lol:
Hors ligne
#11 Le 02/08/2007, à 16:13
- AuraHxC
Re : reverse engineering ou comment "tracer" l'execution de blender
Donc on y va pour une compilation de blender, pour ceux à qui ça interesse blender est un logiciel vraiment puissant dont les mise a jours ce font à la hauteur de 3 par an et l'arrivé de la version 2.5 avant la fin de l'année promet plein de belle chose.
Alors autant essayer de participer à sont evolution.Je posterais la façon de compiler le programme ++:lol:
Faut savoir se faire mal parfois
Hors ligne
#12 Le 02/08/2007, à 19:44
- volkukan
Re : reverse engineering ou comment "tracer" l'execution de blender
Maintenant que j'ai compilé avec scons sans avoir vraiment fait attention si c en mode debug ou pas
je tape
gdb blender
puis j'ai ce message....
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
Je sais pas trops si c'est grave ou pas en tout cas je pose un breakpoint sur la fonction main
b main
or il ne me retourne pas la ligne est le nom de fichier dans lequel se trouve cette fonction
et quand je tape run je m'arrete bien a un main mais impossible de le localiser,
Dernière modification par volkukan (Le 02/08/2007, à 19:44)
Hors ligne
#13 Le 02/08/2007, à 20:17
- trucutu
Re : reverse engineering ou comment "tracer" l'execution de blender
Maintenant que j'ai compilé avec scons sans avoir vraiment fait attention si c en mode debug ou pas
je tapegdb blender
puis j'ai ce message....
There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i486-linux-gnu"...Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
Je sais pas trops si c'est grave ou pas en tout cas je pose un breakpoint sur la fonction main
b main
or il ne me retourne pas la ligne est le nom de fichier dans lequel se trouve cette fonction
et quand je tape run je m'arrete bien a un main mais impossible de le localiser,
- Il faut qu'il y ait -g dans les options de compilation.
- pour le main, il vaudrait mieux que tu fasse un "grep" directement dans les fichiers. car je pense que gdb s'arrête juste avant (hors pour main....), donc les traces ne t'indiqueront rien. pour d'autres fonctions par contre, une fois que t'es arrêté, tu peux faire un bt pour voir l'enchainement des fonctions avant.
- sinon, vu que tu as les sources, tu peux aussi débugguer avec des printf... Il peut y avoir des traces (création de fichiers) aussi plus ou moins importantes suivant le niveau. A voir si c'est implémenté dans les sources.
La chanson du dimanche - "La pêche !"
PC acheté chez Novatux : entièrement satisfait.
Faire des recherches solidaires !
Hors ligne
#14 Le 02/08/2007, à 21:10
- clem-vangelis
Re : reverse engineering ou comment "tracer" l'execution de blender
le plus simple pour commencer serait d'essayer de comprendre un logiciel simple et moins complexe , en attaquant des gros trucs comme ça tu risque de te découragé ou de te dégouté de la prog...
Hors ligne
#15 Le 03/08/2007, à 20:47
- volkukan
Re : reverse engineering ou comment "tracer" l'execution de blender
Salut, donc j'ai compilé blender avec la commande make et o miracle gdb fonctionne ainsi lorsque je fais
b make
j'obtient la ligne et le fichier où se trouve la fonction.
Ensuite lorsque je tape n javance et observe les fonctions qui s'enchainent.
Cependant je fini par arriver à un moment ou il n'y a plus de fonction qui apparait et d'un coté je me dis que cela est normal car je ne declenche aucun evenement.
Alors j'essai d'en enclencher mais je ne vois aucun effet sur la console. Je pense que c'est normal mais est-ce possible de parametrer la console pour qu'elle devienne sensible a chaque evenement que je ferais sur blender en m'affichant la succession des fonctions.
Comme dans les film;)
Hors ligne
#16 Le 03/08/2007, à 22:29
- amadeus
Re : reverse engineering ou comment "tracer" l'execution de blender
C'est pas du tout par mechancete, mais je pense que tu n'as pas encore les connaissance necessaires pour t'attaquer a un morceau aussi gros. Tu devrai probablement, comme le disait quelqu'un plus haut, commencer par un plus petit morceau. Ou alors continuer a programmer.
Dumbledore returns from the dead and declares it to be hammertime, Harry proceeds to break it down, Voldemort is unable to touch this.
Hors ligne