imgtools/imglib/inc/e32image.h
author timothy.murphy@nokia.com
Sun, 28 Feb 2010 21:18:07 +0200
branchfix
changeset 279 733464eaac50
parent 0 044383f39525
child 590 360bd6b35136
permissions -rw-r--r--
fix: make sure host attribute is set rather than blank in logs on windows by using the env var 'COMPUTERNAME' instead of 'HOSTNAME'. Thus make it less difficult to order recipes in the log by time.

/*
* Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/


#ifndef __E32IMAGE_H__
#define __E32IMAGE_H__

#if defined(__MSVCDOTNET__) || defined(__TOOLS2__)
#include <fstream>
using namespace std;
#else //!__MSVCDOTNET__
#include <fstream.h>
#endif //__MSVCDOTNET__

#include <e32std.h>
#include <e32ldr.h>
#include <f32image.h>
#include "byte_pair.h"

enum TFileSource
	{
	EE32Image=0,
	EPeFile=1,
	EElfFile=2,
	};

class E32ImageFile
	{
public:
	static E32ImageFile* New();
	E32ImageFile(CBytePair *aBPE = NULL);
	virtual ~E32ImageFile();
	virtual TBool Translate(const char* aFileName, TUint aDataBase, TBool aAllowDllData, TBool aSymLkupEnabled = FALSE);
	TInt ReadHeader(ifstream& is);
	TInt Open(const char* aFileName);
#ifndef __LINUX__
	TInt Open(const wchar_t* aFileName);
#endif
	void Adjust(TInt aSize, TBool aAllowShrink=ETrue);
	TUint VaOfOrdinal(TUint aOrdinal);
	void RelocateSection(char* aPtr, char *aRelocs, TUint aCodeDelta, TUint aDataDelta, char* aImagePtr, TLinAddr** aIATRefs, TBool keepIAT=EFalse);
	//
	TUint TextOffset();
	TUint DataOffset();
	TUint BssOffset();
	TUint32 Capability();
	TUint32 Format();
	TInt NumberOfImports();

	TInt IsValid();
	TInt IsDll();
	enum TDumpFlags
		{
		EDumpHeader = 1<<0,
		EDumpSecurityInfo = 1<<1,
		EDumpCode = 1<<2,
		EDumpData = 1<<3,
		EDumpExports = 1<<4,
		EDumpImports = 1<<5,
		EDumpDefaults = EDumpHeader|EDumpCode|EDumpData|EDumpExports|EDumpImports
		};
	void Dump(TText *aFileName,TInt aDumpFlags);
	void DumpHeader(TInt aDumpFlags);
	void DumpData(TInt aDumpFlags);
	void SetStackSize(TInt aSize);
	void SetHeapSizeMin(TInt aSize);
	void SetHeapSizeMax(TInt aSize);
	void SetUids(TUid aUid1, TUid aUid2, TUid aUid3);
	void SetSecureId(TUint32 aId);
	void SetVendorId(TUint32 aId);
	void SetCallEntryPoints(TInt aBool);
	void SetFixedAddress(TInt aBool);
	void SetPriority(TProcessPriority aPri);
	void SetCapability(SCapabilitySet& aCapabilities);
	void SetFPU(unsigned int aFPU);
	static TInt IsE32ImageFile(char *aFileName);
	TInt DetermineEntryPointType();
	void UpdateHeaderCrc();
	void SetDefaultHeader();
	void CreateExportBitMap();
	void AddExportDescription();
	TInt CheckExportDescription();
	TInt Validate();
public:
	inline TUint OrigCodeOffset() const {return OffsetUnadjust(iOrigHdr->iCodeOffset);}
	inline TUint OrigDataOffset() const {return OffsetUnadjust(iOrigHdr->iDataOffset);}
	inline TUint OrigCodeRelocOffset() const {return OffsetUnadjust(iOrigHdr->iCodeRelocOffset);}
	inline TUint OrigDataRelocOffset() const {return OffsetUnadjust(iOrigHdr->iDataRelocOffset);}
	inline TUint OrigImportOffset() const {return OffsetUnadjust(iOrigHdr->iImportOffset);}
	inline TUint OrigExportDirOffset() const {return OffsetUnadjust(iOrigHdr->iExportDirOffset);}
	inline TUint OffsetUnadjust(TUint a) const {return a ? a-iOrigHdrOffsetAdj : 0;}
	inline void OffsetAdjust(TUint& a) { if (a) a+=iOrigHdrOffsetAdj; }
public:
	char* iData;
	TInt iSize;
	E32ImageHeader* iOrigHdr;
	E32ImageHeaderV* iHdr;
	char* iFileName;
#ifndef __LINUX__
	wchar_t* iWideFileName;
#endif
	TInt iError;
	TFileSource iSource;
	TUint iOrigHdrOffsetAdj;
	TInt iFileSize;
	TUint8* iExportBitMap;
	TInt iMissingExports;
	CBytePair *iBPE;
	};

#ifdef __VC32__
ostream &operator<<(ostream &os, const E32ImageFile &aImage);
#else
ostream &operator<<(ostream &os, const E32ImageFile &aImage);
#endif
ifstream &operator>>(ifstream &is, E32ImageFile &aImage);

#endif