begin process at 2012 05 25 06:21:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Système d'exploitation

 > 

Windows

 > 

compréhension des fichiers PE.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

compréhension des fichiers PE.

samedi 31 janvier 2009 à 20:07:15 | compréhension des fichiers PE.

Adeon

Bonjour à tous !

Je suis en train de me mettre à la décompilation. Je commence à comprendre les fichiers PE, le langage ASM ( que je ne connaissais pas avant ) ainsi que sa conversion en langage machine.

J'ai maintenant un petit détail qui me turlupine !

En effet,
- avec Visual studio, je crée une simple console qui ne fait rien.
- J'étudie ( avec un simple prog d'ouverture d'un fichier en Hexa ) le .exe créé ( au format PE, bien sure )
- je me rend compte, en étudiant le Header de section, que j'ai 1 section qui a son paramètre Raw Offset à 0x00004000
- J'en conclu ( corrigez-moi bien si je me trompe ! ) que le programme commence à l'adresse 0x00004000.

voila le début ( à partir de l'adresse 0x00004000 ) de mon .exe :
CC
CC
CC
CC
E9 C6 0A 00 00
E9 61 0B 00 00
...


- Sous Visual, j'active le debugger de mon programme pour mieu voir ce qui ce passe, voila ce que je lis :

009D1001 CC               int         3     ( Je présume que 009D1001 correspond a une adresse dans la RAM )
009D1002 CC               int         3   
009D1003 CC               int         3   
009D1004 CC               int         3   
009D1005 E9 C6 0A 00 00   jmp         _setdefaultprecision (9D1AD0h)  ( on remarque bien les instructions hexa de mon .EXE ! )
009D100A E9 61 0B 00 00   jmp         _setargv (9D1B70h)
009D100F E9 46 22 00 00   jmp         DebugBreak (9D325Ah)
009D1014 E9 47 09 00 00   jmp         _RTC_GetErrDesc (9D1960h)

..... beacoup ( 87 ) de JMP faisant appelle a des fonctions de windows ( je pense ) .....
009D11AE E9 7F 0F 00 00   jmp         _initterm_e (9D2132h)
009D11B3 E9 58 08 00 00   jmp         _RTC_GetErrorFunc (9D1A10h)
009D11B8 CC               int         3   
009D11B9 CC               int         3    

..... beaucoup de CC .....
009D136D CC               int         3   
009D136E CC               int         3   
009D136F CC               int         3   

--- c:\users\richard\desktop\consol_asup\consol_asup\main.cpp ------------------
-----ET ENFIN ON ARRIVE A MON PROGRAMME QUE J'AI ECRIS
     1:
     2: int main()
     3: {
009D1370 55               push        ebp 
009D1371 8B EC            mov         ebp,esp
009D1373 81 EC C0 00 00 00 sub         esp,0C0h
009D1379 53               push        ebx 
009D137A 56               push        esi 
009D137B 57               push        edi 
009D137C 8D BD 40 FF FF FF lea         edi,[ebp-0C0h]
009D1382 B9 30 00 00 00   mov         ecx,30h
009D1387 B8 CC CC CC CC   mov         eax,0CCCCCCCCh
009D138C F3 AB            rep stos    dword ptr es:[edi]

    17:     return 0;
009D138E 33 C0            xor         eax,eax
    18: }
009D1390 5F               pop         edi 
009D1391 5E               pop         esi 
009D1392 5B               pop         ebx 
009D1393 8B E5            mov         esp,ebp
009D1395 5D               pop         ebp 
009D1396 C3               ret             

--- No source file -------------------------------------------------------------
009D1397 CC               int         3   
009D1398 CC               int         3   

... beacoup de CC ....
....et apres des fonctions de windows qui sont appelées par l'instruction RET ( si je me trompe pas )...



Bon et bien voila un peu comment je procéde ! J'aimerai donc savoir :
- si il n'y a pas d'erreurs dans tout mon résonement
- pourquoi, lorsque je lance le debugger, il me met la première étape sur le 009D1370   55               push        ebp  ?? alors que mon programme devrait commencer à 009D1005 E9 C6 0A 00 00   jmp         _setdefaultprecision (9D1AD0h)  !! Qui correspond à l'adresse 0x00004000

Je vous remercie.
__________________

Adeon, programmeur de jeux sur directX 9 (http://theolith.com) à votre service !

lundi 2 février 2009 à 23:00:53 | Re : compréhension des fichiers PE.

ToutEnMasm

Réponse acceptée !
Le linker rajoute des instructions avant le programme utilisateur.
Ce code rajouté a pour effet de décaler l'adresse de départ et pour rôle de finir l'intallation de l'executable.Apres pour tout comprendre,il faut étudier le loader (chargeur).
mardi 3 février 2009 à 10:59:43 | Re : compréhension des fichiers PE.

Adeon

ok impécable, je pense avoir trouvé des articles intéressants sur le Loader, je te remercie, tu m'as bien donné le mot clef que je recherchais :D

++

______________________

Adeon, programmeur de jeux sur directX 9 (http://theolith.com) à votre service !



Cette discussion est classée dans : int, cc, ebp, jmp, e9


Répondre à ce message

Sujets en rapport avec ce message

erreur compilation [ par greg4 ] je voudrai compiler--------------------------------------.model tiny.dataHelloMessage db 13,10,'Hello World !',13,10,'$'.codeorg 100hstart: mov ax,@d c/c++ et 19h [ par Xs ] salut !je travaille sous VC++ et j'aimerais utiliser une interuption processeur : 19hmon code actuel marche mais au lieu d'eteindre le PC, il le fait INT 5C [ par Ariane ] Je cherche toute info sur l'int 5C . NETBIOSLes infos trouvées sur le net etant insuffisantes.Merci d'avance. tout sans int [ par TRAX44 ] salut, je chercherai les adresse de ports de différente périphérique et autre tel que le clavier, la souris, l'écran et tout sa (dans le but de faire probleme de comprehension de jmp:( [ par SVKMrNice ] yop le monde alors voila je suis debutant en asm... de temps en temps je regarde des progs en asm pour essayer de comprendre les techniques... mais vo loader problème de code [ par TRAX44 ] salut tout le monde !!g essayer de faire un loader (petit prog qui charge un autre prog) mais c un desartre je comprend pas très bien ce qui ne marche petit probleme de debutant [ par freekc ] j'essaie de faire un ptit prog que lorsque l'on rentre son nom prenom etc . Il y est un recapitulatif qui se mette en dessous ms lorsque que le recapi Help : afficher une chaine de caractère "mémorisée" [ par did2604 ] Bonsoir à tous. Mon problème peut vous paraître très simpliste, mais pour quelqu'un qui fait de la programmation assembleur depuis à peine 1 mois, tou tt sans int [ par TRAX44 ] Salut,je me lance d'un porjet fastidieux et j'aurais besoin de votre aide : Tout fair sans les interuptions. La seul solution que je connaisse pour l' Probleme de boot [ par DbD ] Bonjour,Alors je fais mon OS et j'ai des problème de boot a partir d'un disquette, sur certain pc ou quand le noyau depasse 40 secteurs ca boot plus


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,778 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales