source: trunk/tools/common/kFileLX.h

Last change on this file was 21916, checked in by dmik, 14 years ago

Merge branch gcc-kmk to trunk.

File size: 4.2 KB
Line 
1/* $Id: kFileLX.h,v 1.6 2002-02-24 02:47:26 bird Exp $
2 *
3 * kFileLX - Linear Executable file reader.
4 *
5 * Copyright (c) 2000 knut st. osmundsen (knut.stange.osmundsen@pmsc.no)
6 *
7 * Project Odin Software License can be found in LICENSE.TXT
8 *
9 */
10
11#ifndef _kFileLX_h_
12#define _kFileLX_h_
13
14struct e32_exe;
15struct o32_obj;
16struct o32_map;
17
18
19class kFileLX : public kFileFormatBase, public kExecutableI, public kPageI, public kRelocI
20{
21public:
22 kFileLX(const char *pszFilename) throw (kError);
23 kFileLX(kFile *pFile) throw (kError);
24 ~kFileLX() throw (kError);
25
26 /** @cat Module information methods. */
27 KBOOL moduleGetName(char *pszBuffer, int cchSize = 260);
28
29 /** @cat Misc */
30 virtual KBOOL isLx() const {return TRUE;};
31
32 struct o32_obj * getObject(int iObject);
33 int getObjectCount();
34
35 /** @cat Export enumeration methods. */
36 KBOOL exportFindFirst(kExportEntry *pExport);
37 KBOOL exportFindNext(kExportEntry *pExport);
38 void exportFindClose(kExportEntry *pExport);
39
40 /** @cat Export Lookup methods */
41 KBOOL exportLookup(unsigned long ulOrdinal, kExportEntry *pExport);
42 KBOOL exportLookup(const char * pszName, kExportEntry *pExport);
43
44 /** @cat Get and put page methods. */
45 int pageGet(char *pachPage, unsigned long ulAddress) const;
46 int pageGet(char *pachPage, int iObject, int offObject) const;
47 int pagePut(const char *pachPage, unsigned long ulAddress);
48 int pagePut(const char *pachPage, int iObject, int offObject);
49 int pageGetPageSize() const;
50
51 /** @cat Compression and expansion methods compatible with exepack:1 and exepack:2. */
52 static int expandPage1(char *pachPage, int cchPage, const char * pachSrcPage, int cchSrcPage);
53 static int expandPage2(char *pachPage, int cchPage, const char * pachSrcPage, int cchSrcPage);
54 static int compressPage1(char *pachPage, const char * pachSrcPage, int cchSrcPage);
55 static int compressPage2(char *pachPage, const char * pachSrcPage, int cchSrcPage);
56
57 /** @cat Relocation methods */
58 KBOOL relocFindFirst(unsigned long iSegment, unsigned long offObject, kRelocEntry *preloc);
59 KBOOL relocFindFirst(unsigned long ulAddress, kRelocEntry *preloc);
60 KBOOL relocFindNext(kRelocEntry *preloc);
61 void relocFindClose(kRelocEntry *preloc);
62
63
64protected:
65 /** @cat Internal data */
66 void * pvBase; /* Pointer to filemapping. */
67 unsigned long cbFile; /* Size of filemapping. */
68 unsigned long offLXHdr; /* Offset of the LX header. */
69 struct e32_exe * pe32; /* Pointer to the exe header within the filemapping. */
70 struct o32_obj * paObject; /* Pointer to the objecttable. */
71 struct o32_map * paMap; /* Pointer to page map table. */
72 unsigned long * paulFixupPageTable; /* Pointer to the fixup page table. */
73 char * pchFixupRecs; /* Pointer to the fixup record table. */
74
75 /** @cat Export and Module information worker. */
76 KBOOL queryExportName(int iOrdinal, char *pszBuffer);
77
78 /** @cat Get and put page workers. */
79 /*
80 int pageGetLX(char *pachPage, int iObject, int iPage) const;
81 int pageGetLX(char *pachPage, int iPage) const;
82 int pagePutLX(const char *pachPage, int iObject, int iPage);
83 int pagePutLX(const char *pachPage, int iPage);
84 */
85
86 /** @cat Address mapping helpers. */
87 unsigned long lxAddressToObjectOffset(unsigned long ulAddress, unsigned long * pulObject) const;
88 unsigned long lxSpecialSelectorToObjectOffset(unsigned long offObject, unsigned long * pulObject) const;
89 KBOOL lxValidateObjectOffset(unsigned long ulObject, unsigned long offOffset) const;
90 KBOOL lxValidateAddress(unsigned long ulAddress) const;
91
92 /** @cat Import Helpers */
93 char * lxGetImportModuleName(unsigned long ordModule) const;
94 char * lxGetImportProcName(unsigned long offProc) const;
95};
96
97#endif
Note: See TracBrowser for help on using the repository browser.