# Décompilation fichier objet



## Any (30 Mars 2010)

Bonjour,

Je voulais savoir comment je pourrai décompiler un fichier avec l'extension ".o" ?!


----------



## [Vezøul]Numerø41 (30 Mars 2010)

A part les fichiers interprétés comme pour Java tu ne peux pas "décompiler" des fichiers objets. Le mieux que tu puisse faire est de les désassembler et de te taper le code assembleur souvent bien bourrin et casse tête. Ou si tu connais bien l'hexadécimal, le lire avec un éditeur prévu à cet effet.


----------



## Any (30 Mars 2010)

[Vezøul]Numerø41;5438189 a dit:
			
		

> A part les fichiers interprétés comme pour Java tu ne peux pas "décompiler" des fichiers objets. Le mieux que tu puisse faire est de les désassembler et de te taper le code assembleur souvent bien bourrin et casse tête. Ou si tu connais bien l'hexadécimal, le lire avec un éditeur prévu à cet effet.



Merci tu as des logiciel pour avoir  le code en assembleur ou en hexadécimal? 

Je pense m'en sortir jai des base en assembleur et le fichier .o ne contient que le corps de fonction de base !


----------



## Diablovic (30 Mars 2010)

Tu trouveras peut-être des infos utiles dans ce sujet (en anglais).


----------



## Nyx0uf (30 Mars 2010)

GDB 

Si c'est un binaire obj-c, y a class-dump qui permet de générer les headers des classes aussi.


----------



## Any (30 Mars 2010)

Nyx0uf a dit:


> GDB
> 
> Si c'est un binaire obj-c, y a class-dump qui permet de générer les headers des classes aussi.



Mon fichier source était écrit en c++ alors c'est surement un binaire obj-c !

comment on fait ?

ps: J'ai trouvé ce lien http://www.yaronet.com/posts.php?s=125860 mais je ne comprend pas de trop ce qu'est un fichier ELF


----------



## [Vezøul]Numerø41 (30 Mars 2010)

Tiens voilà ce que c'est en français : http://www.cpt.univ-mrs.fr/info/Guide_Rootard-13.html

Bref, depuis bien longtemps sur Linux le format ELF (Executable and Linkable Format) est supporté pour le link, je ne comprend pas pourquoi ils se posent la question sur Yaronet, à moins qu'ils utilisent encore les premières versions de RedHat ou Debian.


----------



## Any (30 Mars 2010)

Merci pour ce lien sur ELF ^^

Si je vous donne mon .o quelqu'un pourrai me donner l'assembleur ou l'hexadécimal ?


----------



## Nyx0uf (31 Mars 2010)

Les fichier ELF sur mac os, on s'en fou pas mal en fait... le format de fichier c'est mach-o.
Sinon pour un dump hexa t'ouvres le terminal et tu tapes :

```
hexdump tonfichier.o
```


----------



## Any (1 Avril 2010)

Nyx0uf a dit:


> Les fichier ELF sur mac os, on s'en fou pas mal en fait... le format de fichier c'est mach-o.
> Sinon pour un dump hexa t'ouvres le terminal et tu tapes :
> 
> ```
> ...



oki oki  sa marche et je le traduit avec quel soft ?i


----------



## [Vezøul]Numerø41 (1 Avril 2010)

Comment ça le traduire ? Tu as de l'hexa non ? Ce n'est pas ce que tu voulais ?


----------



## Nyx0uf (1 Avril 2010)

Tu veux récup les sources du binaire ?

Si oui, tu peux oublier, à moins que tu maitrises totalement GDB et l'asm ? :>


----------



## chombier (1 Avril 2010)

Any a dit:


> Merci tu as des logiciel pour avoir  le code en assembleur ou en hexadécimal?
> 
> Je pense m'en sortir jai des base en assembleur et le fichier .o ne contient que le corps de fonction de base !


Pour désassembler un fichier objet mach-o sous Mac OS X, la commande à employer est "otool"

```
$ otool -tvV /usr/lib/crt1.o
/usr/lib/crt1.o:
(__TEXT,__text) section
start:
00000000	or	r26,r1,r1
00000004	addi	r1,r1,0xfffc
00000008	rlwinm	r1,r1,0,0,26
0000000c	li	r0,start
00000010	stw	r0,start(r1)
00000014	stwu	r1,0xffc0(r1)
[...]
```


----------



## tatouille (2 Avril 2010)

a les mechants, c'est pas bien de se foutre de la gueule des newbs

un dump object, ca depend si tu l'as construit avec des infos de debug ou pas ca peut aider, apres le disasemblage pour recreer le code original tu peux te mettre le poing dans le cul, l'hexadump te permet de comprendre la structure et le fonctionnement si tu veux reverse le code avec tes mimines

ELF ou Mach sont des formats de fichier binaire contenant le set d'instruction c'est une facon differente de stocker ces instructions, et si finalement valides executees par ton kernel; ton kernel doit comprendre comment traiter ce container pour y retrouver les instructions a executer.

http://en.wikipedia.org/wiki/Executable_and_Linkable_Format
http://en.wikipedia.org/wiki/Mach-o

et plus plein de chose concernant la securité comme resolver randomly les liens dynamiques

mais bon...

// Mon fichier source était écrit en c++ alors c'est surement un binaire  obj-c !

peut etre dans 10 ans


----------



## Nyx0uf (2 Avril 2010)

tatouille a dit:


> // Mon fichier source était écrit en c++ alors c'est surement un binaire  obj-c !
> 
> peut etre dans 10 ans




C'est pas bien de se foutre de la gueule des newbs


----------



## [Vezøul]Numerø41 (2 Avril 2010)

Mais ne lui cassez pas tous ses espoirs. Lire de l'assembleur est possible, courage (surtout s'il a été optimisé).


----------



## Any (5 Avril 2010)

Mais lol c'est pas bien de se moquer xD 

Bon en gros je doit lâcher l'affaire c'est trop compliqué ^^


----------



## ntx (5 Avril 2010)

Any a dit:


> Mais lol c'est pas bien de se moquer xD
> 
> Bon en gros je doit lâcher l'affaire c'est trop compliqué ^^


Si tu ne sais pas faire la différence entre de C++ et de l'Obj-C et que tu n'as jamais entendu parlé d'assembleur, j'ai effectivement peu que ce soit trop compliqué pour toi :rateau:


----------



## Any (6 Avril 2010)

ntx a dit:


> Si tu ne sais pas faire la différence entre de C++ et de l'Obj-C et que tu n'as jamais entendu parlé d'assembleur, j'ai effectivement peu que ce soit trop compliqué pour toi :rateau:



j'ai fait de l'assembleur je suis en première année d'iut info ^^ mais c'est vrai je ne connaissais pas la différence entre c'est deux langage pour moi c'est du C  !


----------



## [Vezøul]Numerø41 (6 Avril 2010)

Et puis de l'assembleur en avoir fait ne veut pas dire qu'on maîtrise, du code assembleur sorti par un compilateur si en plus il est optimisé et spécifique à une architecture, alors faut vraiment s'accrocher.    

Le mieux c'est de récupérer les sources un point c'est tout.


----------



## Any (6 Avril 2010)

[Vezøul]Numerø41;5444674 a dit:
			
		

> Et puis de l'assembleur en avoir fait ne veut pas dire qu'on maîtrise, du code assembleur sorti par un compilateur si en plus il est optimisé et spécifique à une architecture, alors faut vraiment s'accrocher.
> 
> Le mieux c'est de récupérer les sources un point c'est tout.



Tu as bien raison ! je vais voir avec la time machine ...

Je vien de m'en souvenir ...


----------



## [Vezøul]Numerø41 (7 Avril 2010)

Ah mais si en plus tu ne sauvegardes pas tes sources, en effet tu es mal barré. Le versionning aussi est une compétence de base chez les développeurs. A petite échelle les deux sont très liés mais faut qu'ils existent, c'est le minimum.


----------

