home *** CD-ROM | disk | FTP | other *** search
/ Programming Win32 Under the API / ProgrammingWin32UnderTheApiPatVillani.iso / pedasm.zip / DasmBase.h < prev    next >
C/C++ Source or Header  |  1998-10-23  |  4KB  |  140 lines

  1. /*        fichier DasmBase.h : fichier header
  2.  *
  3.  *    descr : classe de base analyse et desassemblage d'une section
  4.  *    projet : PEDasm
  5.  *
  6.  *    rq:
  7.  *    Ce programme est libre de droits. Il peut etre distribue et/ou modifie
  8.  *  selon les termes de la licence 'GNU General Public License version 2'.
  9.  *    
  10.  *    Ce programme est distribue sans aucunes garanties, y compris d'utilite 
  11.  *    ni de risques encouru, quelle que soit son utilisation.
  12.  *
  13.  *    lire le fichier licence.txt fourni ou bien ecrire a :
  14.  *    the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  15.  *    pour recevoir une copie de la licence.
  16.  *      
  17.  *    Copyright (C) 1997 - 1998 Nicolas Witczak <witczak@geocities.com>
  18.  */
  19.  
  20. #ifndef DASM_BASE_H
  21.     #define DASM_BASE_H
  22.  
  23.  
  24. #include <cstdlib>
  25. #include <cstdio>
  26. #include <vector>
  27. #include <set>
  28. #include <string>
  29.  
  30.  
  31.  
  32. #include "ExeRep.h"
  33.  
  34. //////////////////////////////////////////////////////////////////
  35. /** class CDasm : service communs pour desassemblage 
  36.  *    d'une portion de code ou de donnees . 
  37.  *    rq : cette classe est en fait un union d'instances CDasmCode 
  38.  *    et CDasmData . Ces deux dernieres classes ne doivent pas contenir
  39.  *    de donnees membres necessitant un constructeur ou destructeur
  40.  */
  41. class CDasm
  42. {
  43. public:
  44. // construction
  45.     CDasm();
  46.  
  47.     /** fct SetWindow : met en place une fenetre de desassemblage 
  48.      *    sur une section
  49.      */
  50.     CDasm& SetWindow( CSection* pSection );
  51.     
  52.     /** SetFile : attache un fichier en sortie */
  53.     CDasm& SetFile( FILE* pFile ) ;
  54.  
  55. // attributs
  56.     // parametres
  57.     /** fichier de sortie du source*/
  58.     FILE*        m_pFileOut ;
  59.     
  60.     /** indicateur 1ere ou 2eme passe 
  61.      *    : ctePassScan -> scan uniquement , ctePassEcho -> produit la sortie
  62.      */
  63.     int         m_iPass ;
  64.  
  65.     /** indicateur de mode code donnes 
  66.      *    vaut iCodeMode ou iDataMode 
  67.      */
  68.     int         m_iMode ;
  69.  
  70. // symbols
  71.     
  72.     /** symbols encadrant le bloc courant : eventuellement nuls*/
  73.     CSymbol* m_pSymbCur , *m_pSymbNext ;
  74.  
  75.     /** section ds laquelle on desassemble */
  76.     CSection*    m_pSection ;
  77.     
  78. // pointeurs sur le bloc en cours
  79. // 1 bloc == espace entre 2 symbols
  80.     /** ptr mem d'instruction courante 
  81.      * , ptr mem dans l'instruction , pointeur d'arret*/
  82.     BYTE*        m_pvBegin , *m_pvNext , *m_pvCur ;
  83.     
  84.     /** valeur du registre EIP en cours et de la fois d'avant */
  85.     unsigned int m_iIP , m_iLastIP;
  86.  
  87.     /** valeur du registre EIP de debut de bloc */
  88.     unsigned int m_iIBeginIP ;
  89.  
  90.     /** valeur du registre EIP debut du block suivant*/
  91.     unsigned int m_iNextIP ;
  92.         
  93. // interface avec le programme
  94.  
  95.     /** point d'entree desassemblage
  96.      *    param iPass  : iPassScan -> scan uniquement , iPassEcho -> produit la sortie 
  97.      */
  98.     void Run( int iPass ) ;
  99.  
  100. // fonctions d'aide    
  101.     /** retourne l'adresse virtuelle de fin*/
  102.     unsigned int va_end();
  103.  
  104. // interface avec classes derivees 
  105.  
  106.     /** appele a chaque permutation code / donnees
  107.      */
  108.     void Reset();
  109.  
  110.     /** fct ScanNext : interprete l'instruction suivante 
  111.      *    positionne les variables de cette classe
  112.      *    peut modifier m_iIP ou m_pvCur
  113.      *        retourne : false en cas d'erreur 
  114.      */
  115.     bool ScanNext() ;
  116.     
  117.     /** PrintOutput : ecrit l'instruction ds le stream membre
  118.      */
  119.     void PrintInstr() ;
  120. };
  121.  
  122. /** constantes mode code , donnee */
  123. const int cteCodeMode = 0 ;
  124. const int cteDataMode = 1 ;
  125.  
  126. /** constantes mode analyse , echo */
  127. const int ctePassScan  = 1 ;
  128. const int ctePassEcho  = 2 ;
  129.  
  130. //////////////////////////////////////////////////////////////////
  131. // fonctions globales
  132. /** fct CreateCDasm : cree un objet CDasm 
  133.  *        retourne un buffer assez grand pour contenir union( CDasmCode , CDasmData )
  134.  */
  135. CDasm* CreateCDasm();
  136.  
  137.  
  138. #endif //DASM_BASE_H
  139.     
  140.