hi, What is the difference between winelib executable format and win32 PE file format? Isn't winelib executable just the wrapper of the windows executable?
I have a win32 function which can read an executable file and determine all the dependent dlls. I want to port it to Linux and build it using winelib. Hence the same functunalities can be achieved (i.e determine if the file is winelib file and all its dependent winelib dlls). Can somebody tell me how the following code be modified so that it works for winelib application? Thanks a lot.
Wu
//call CreateFileA() to create a file handle HANDLE hFile = CreateFileA(fName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE)0);
//call CreateFileMappingA() to create a file mapping HANDLE hFileMapping = CreateFileMappingA(hFile,NULL, PAGE_READONLY, 0, 0,NULL);
//call MapViewOfFile() PVOID pMemoryMappedFileBase = (PCHAR)MapViewOfFile( hFileMapping, FILE_MAP_READ, 0, 0, 0);
PIMAGE_DOS_HEADER pDosHdr = (PIMAGE_DOS_HEADER)pMemoryMappedFileBase; if ( IMAGE_DOS_SIGNATURE != pDosHdr->e_magic ) { //not a DOS "MZ" file reurn; }
// Make a pointer to the secondary header DWORD secondaryHeaderOffset = pDosHdr->e_lfanew; PWORD pSecondHdr = (PWORD)((DWORD) pMemoryMappedFileBase + (DWORD)secondaryHeaderOffset );
// Decide what type of EXE, based on the start of the secondary header switch ( *pSecondHdr ) { case IMAGE_OS2_SIGNATURE: exeType = exeType_NE; break; case IMAGE_VXD_SIGNATURE: exeType = exeType_VXD; break; case 0x4558: exeType = exeType_LX; break; // OS/2 2.X }
if ( *(PDWORD)pSecondHdr == IMAGE_NT_SIGNATURE ) { exeType = exeType_PE;
}
......