#include <pefile.hpp>
Public Types | |
| typedef void(* | PImportProc )(uint32_t address, uint32_t hint, const char *dll_name, const char *func_name, void *param) |
| typedef void(* | PRelocationProc )(uint32_t address, unsigned type, void *param) |
| typedef void(* | PResourceProc )(ICFile &file, const PeResourceDirectoryData *data, const PeResourceDirectoryInfo *info, unsigned level, void *param) |
| typedef void(* | PExportProc )(uint32_t address, uint32_t hint, const char *dll_name, const char *func_name, void *param) |
Public Methods | |
| PeFile (ICFile &file) | |
| ~PeFile () | |
| const PE_IMAGE_FILE_HEADER & | GetFileHeader () const |
| const PE_IMAGE_OPTIONAL_HEADER & | GetOptionalHeader () const |
| const PE_IMAGE_SECTION_HEADER * | GetSections () const |
| const PE_IMAGE_SECTION_HEADER & | GetSection (int n) const |
| unsigned | GetSectionCount () const |
| const PE_IMAGE_DATA_DIRECTORY & | GetDataDirectory (unsigned n) const |
| uint32_t | GetImageBase () const |
| void | WriteResource () |
| void | ParseImport (PImportProc proc, void *param) |
| void | ParseRelocations (PRelocationProc proc, void *param) |
| void | ParseResource (PResourceProc proc, void *param) |
| void | ParseExport (PExportProc proc, void *param) |
| RVAFileTranslator & | GetRVA () |
| const RVAFileTranslator & | GetRVA () const |
Static Public Methods | |
| void | WriteFileHdr (const PE_IMAGE_FILE_HEADER &hdr) |
| void | WriteOptionalHdr (const PE_IMAGE_OPTIONAL_HEADER &hdr) |
| void | WriteSectionHdr (const PE_IMAGE_SECTION_HEADER &hdr) |
| void | WriteExport (uint32_t address, uint32_t hint, const char *dll_name, const char *func_name, void *param) |
| void | WriteImport (uint32_t address, uint32_t hint, const char *dll_name, const char *func_name, void *param) |
| void | WriteRelocation (uint32_t address, unsigned type, void *param) |
Private Attributes | |
| PE_IMAGE_NT_HEADERS | nt_hdr |
| PE_IMAGE_SECTION_HEADER * | sections |
| unsigned | numSection |
| ICFile & | file |
| RVAFileTranslator * | rva |
|
|
Definition at line 104 of file pefile.hpp. |
|
|
Definition at line 90 of file pefile.hpp. |
|
|
Definition at line 92 of file pefile.hpp. |
|
|
Definition at line 101 of file pefile.hpp. Referenced by ParseResourceDirectory(). |
|
|
|
Definition at line 96 of file pefile.cpp.
|
|
|
Definition at line 73 of file pefile.hpp. References _PE_IMAGE_OPTIONAL_HEADER::DataDirectory, and GetOptionalHeader(). Referenced by main(), ParseExport(), ParseImport(), ParseRelocations(), and ParseResource().
00074 { return GetOptionalHeader().DataDirectory[n]; };
|
|
|
Definition at line 59 of file pefile.hpp. References _PE_IMAGE_NT_HEADERS::FileHeader, and nt_hdr. Referenced by main().
00060 { return nt_hdr.FileHeader; };
|
|
|
Definition at line 77 of file pefile.hpp. References GetOptionalHeader(), and _PE_IMAGE_OPTIONAL_HEADER::ImageBase. Referenced by main().
00078 { return GetOptionalHeader().ImageBase; };
|
|
|
Definition at line 61 of file pefile.hpp. References nt_hdr, and _PE_IMAGE_NT_HEADERS::OptionalHeader. Referenced by GetDataDirectory(), GetImageBase(), and main().
00062 { return nt_hdr.OptionalHeader; };
|
|
|
Definition at line 110 of file pefile.hpp. References rva.
00110 { return *rva; }
|
|
|
Definition at line 108 of file pefile.hpp. References rva. Referenced by main(), ParseExport(), ParseImport(), ParseRelocations(), and ParseResource().
00108 { return *rva; }
|
|
|
Definition at line 67 of file pefile.hpp. References sections. Referenced by main().
00068 { return sections[n]; };
|
|
|
Definition at line 69 of file pefile.hpp. References numSection. Referenced by main().
00070 { return numSection; };
|
|
|
Definition at line 65 of file pefile.hpp. References sections.
00066 { return sections; };
|
|
||||||||||||
|
Definition at line 362 of file pefile.cpp. References _PE_IMAGE_EXPORT_DIRECTORY::AddressOfFunctions, _PE_IMAGE_EXPORT_DIRECTORY::AddressOfNameOrdinals, _PE_IMAGE_EXPORT_DIRECTORY::AddressOfNames, _PE_IMAGE_EXPORT_DIRECTORY::Base, file, GetDataDirectory(), GetRVA(), IMAGE_DIRECTORY_ENTRY_EXPORT, _PE_IMAGE_EXPORT_DIRECTORY::Name, _PE_IMAGE_EXPORT_DIRECTORY::NumberOfFunctions, _PE_IMAGE_EXPORT_DIRECTORY::NumberOfNames, RawRead(), ICFile::ReadString(), RVAFileTranslator::RVA2FileSafe(), ICFile::Seek(), _PE_IMAGE_DATA_DIRECTORY::Size, ICFile::Tell(), and _PE_IMAGE_DATA_DIRECTORY::VirtualAddress. Referenced by main().
00363 {
00364 // export renamed to export_, in some compiler this is a keyword
00365 const PE_IMAGE_DATA_DIRECTORY& export_ =
00366 GetDataDirectory(IMAGE_DIRECTORY_ENTRY_EXPORT);
00367 if ( export_.VirtualAddress == 0 || export_.Size == 0 )
00368 return;
00369
00370 file.Seek(GetRVA().RVA2FileSafe(export_.VirtualAddress));
00371
00372 PE_IMAGE_EXPORT_DIRECTORY desc;
00373 RawRead(file,desc);
00374
00375 // read DLL name
00376 file.Seek(GetRVA().RVA2FileSafe(desc.Name));
00377 char *pDllName = file.ReadString();
00378 proc(0,0,pDllName,NULL,param);
00379
00380 // delete ".dll" after name
00381 int len = strlen(pDllName);
00382 if (len>=4 && stricmp(pDllName+(len-4),".dll") == 0)
00383 pDllName[len-4] = '\0';
00384
00385 // scan export for this DLL
00386 int ordBase = desc.Base;
00387 long functionPos = GetRVA().RVA2FileSafe(desc.AddressOfFunctions);
00388 long ordinalPos = GetRVA().RVA2FileSafe(desc.AddressOfNameOrdinals);
00389 long namePos = GetRVA().RVA2FileSafe(desc.AddressOfNames);
00390
00391 char **names= new char*[desc.NumberOfFunctions];
00392
00393 // initialize functions
00394 unsigned n;
00395 for( n = 0; n<desc.NumberOfFunctions; ++n)
00396 names[n] = NULL;
00397
00398 for( n = 0; n<desc.NumberOfNames; ++n)
00399 {
00400 uint16_t ordinal;
00401 char *pName;
00402
00403 // read name pos
00404 uint32_t pos;
00405 file.Seek(namePos);
00406 RawRead(file,pos);
00407 namePos = file.Tell();
00408
00409 // read name
00410 file.Seek(GetRVA().RVA2FileSafe(pos));
00411 pName = file.ReadString();
00412
00413 // read ordinal
00414 file.Seek(ordinalPos);
00415 RawRead(file,ordinal);
00416 ordinalPos = file.Tell();
00417
00418 // check ordinal
00419 if (ordinal >= desc.NumberOfFunctions )
00420 throw std::runtime_error("bad ordinal");
00421
00422 names[ordinal] = pName;
00423 }
00424
00425 file.Seek(functionPos);
00426 for( n = 0; n<desc.NumberOfFunctions; ++n)
00427 {
00428 // read function RVA
00429 uint32_t funcRVA;
00430 if (file.Tell() != functionPos)
00431 file.Seek(functionPos);
00432 RawRead(file,funcRVA);
00433
00434 if (funcRVA != 0)
00435 proc(funcRVA,ordBase + n,pDllName,names[n],param);
00436 functionPos += 4;
00437
00438 delete[] names[n];
00439 }
00440
00441 delete[] names;
00442 delete[] pDllName;
00443 }
|
|
||||||||||||
|
Definition at line 290 of file pefile.cpp. References _PE_IMAGE_IMPORT_DESCRIPTOR::Characteristics, file, _PE_IMAGE_IMPORT_DESCRIPTOR::FirstThunk, GetDataDirectory(), GetRVA(), IMAGE_DIRECTORY_ENTRY_IMPORT, IMAGE_ORDINAL, IMAGE_SNAP_BY_ORDINAL, _PE_IMAGE_IMPORT_DESCRIPTOR::Name, _PE_IMAGE_IMPORT_DESCRIPTOR::OriginalFirstThunk, RawRead(), ICFile::ReadString(), ICFile::Seek(), _PE_IMAGE_DATA_DIRECTORY::Size, ICFile::Tell(), _PE_IMAGE_THUNK_DATA32::u1, and _PE_IMAGE_DATA_DIRECTORY::VirtualAddress. Referenced by main().
00291 {
00292 const PE_IMAGE_DATA_DIRECTORY& imports =
00293 GetDataDirectory(IMAGE_DIRECTORY_ENTRY_IMPORT);
00294 if ( imports.VirtualAddress == 0 || imports.Size == 0 )
00295 return;
00296
00297 file.Seek(GetRVA().RVA2FileSafe(imports.VirtualAddress));
00298 for (;;)
00299 {
00300 PE_IMAGE_IMPORT_DESCRIPTOR desc;
00301 RawRead(file,desc);
00302 long pos = file.Tell();
00303
00304 // imports finished
00305 if (desc.Characteristics == 0 && desc.FirstThunk == 0)
00306 break;
00307
00308 uint32_t address = desc.FirstThunk;
00309
00310 // read DLL name
00311 file.Seek(GetRVA().RVA2FileSafe(desc.Name));
00312 char *pDllName = file.ReadString();
00313 proc(0,0,pDllName,NULL,param);
00314
00315 // delete ".dll" after name
00316 int len = strlen(pDllName);
00317 if (len>=4 && stricmp(pDllName+(len-4),".dll") == 0)
00318 pDllName[len-4] = '\0';
00319
00320 // scan import for this DLL
00321 // hintname is at the same address of FirstThunk ?
00322 if (desc.OriginalFirstThunk == 0)
00323 file.Seek(GetRVA().RVA2FileSafe((uint32_t)desc.FirstThunk));
00324 else
00325 file.Seek(GetRVA().RVA2FileSafe((uint32_t)desc.OriginalFirstThunk));
00326 for (;;)
00327 {
00328 PE_IMAGE_THUNK_DATA thunk;
00329 RawRead(file,thunk);
00330 long pos2 = file.Tell();
00331
00332 // finish with this DLL
00333 if (thunk.u1.Ordinal == 0)
00334 break;
00335
00336 if (IMAGE_SNAP_BY_ORDINAL(thunk.u1.Ordinal))
00337 {
00338 // import by ordinal
00339 proc(address,IMAGE_ORDINAL(thunk.u1.Ordinal),pDllName,NULL,param);
00340 }
00341 else
00342 {
00343 // import by name
00344 uint16_t hint;
00345
00346 // read hint and import name
00347 file.Seek(GetRVA().RVA2FileSafe((uint32_t)thunk.u1.AddressOfData));
00348 RawRead(file,hint);
00349 char *p = file.ReadString();
00350 proc(address,hint,pDllName,p,param);
00351 delete [] p;
00352 }
00353 address += sizeof(PE_IMAGE_THUNK_DATA);
00354
00355 file.Seek(pos2);
00356 }
00357 file.Seek(pos);
00358 delete[] pDllName;
00359 }
00360 }
|
|
||||||||||||
|
Definition at line 469 of file pefile.cpp. References file, GetDataDirectory(), GetRVA(), IMAGE_DIRECTORY_ENTRY_BASERELOC, PRelocationProc, RawRead(), ICFile::Seek(), _PE_IMAGE_DATA_DIRECTORY::Size, _PE_IMAGE_BASE_RELOCATION::SizeOfBlock, ICFile::Tell(), _PE_IMAGE_BASE_RELOCATION::VirtualAddress, _PE_IMAGE_DATA_DIRECTORY::VirtualAddress, and WriteRelocation(). Referenced by main().
00470 {
00471 const PE_IMAGE_DATA_DIRECTORY& relocation =
00472 GetDataDirectory(IMAGE_DIRECTORY_ENTRY_BASERELOC);
00473 if ( relocation.VirtualAddress == 0 || relocation.Size == 0 )
00474 return;
00475
00476 file.Seek(GetRVA().RVA2FileSafe(relocation.VirtualAddress));
00477 if (proc == PeFile::WriteRelocation)
00478 {
00479 printf("\nRelocations\n");
00480 printf("Address Type\n");
00481 }
00482 for (;;)
00483 {
00484 PE_IMAGE_BASE_RELOCATION chunk;
00485 long pos = file.Tell();
00486 RawRead(file,chunk);
00487 if (chunk.VirtualAddress == 0)
00488 break;
00489 for (int i=(chunk.SizeOfBlock - sizeof(chunk))>>1; i>0; --i)
00490 {
00491 uint16_t info;
00492 RawRead(file,info);
00493 if (info == 0)
00494 break;
00495 proc(chunk.VirtualAddress+(info&0xFFFu),info>>12,param);
00496 }
00497 file.Seek(pos+chunk.SizeOfBlock);
00498 }
00499 printf("\n");
00500 }
|
|
||||||||||||
|
Definition at line 726 of file pefile.cpp. References file, GetDataDirectory(), GetRVA(), PeResourceDirectoryInfo::highLevel, PeResourceId::id, IMAGE_DIRECTORY_ENTRY_RESOURCE, PeResourceId::name, ParseResourceDirectory(), RVAFileTranslator::RVA2FileSafe(), ICFile::Seek(), _PE_IMAGE_DATA_DIRECTORY::Size, and _PE_IMAGE_DATA_DIRECTORY::VirtualAddress. Referenced by ResourceExtract::ExtractIcons(), and WriteResource().
00727 {
00728 const PE_IMAGE_DATA_DIRECTORY& resource =
00729 GetDataDirectory(IMAGE_DIRECTORY_ENTRY_RESOURCE);
00730 if ( resource.VirtualAddress == 0 || resource.Size == 0 )
00731 return;
00732
00733 uint32_t start = GetRVA().RVA2FileSafe(resource.VirtualAddress);
00734 file.Seek(start);
00735
00736 // init directory info (root)
00737 PeResourceDirectoryInfo info;
00738 info.name = NULL;
00739 info.id = 0;
00740 info.highLevel = NULL;
00741
00742 ParseResourceDirectory(GetRVA(),start,&info,0,file,proc,param);
00743 }
|
|
||||||||||||||||||||||||
|
Definition at line 276 of file pefile.cpp.
00277 {
00278 if (address == 0)
00279 printf("\nDLL: %s\n",dll_name);
00280 else
00281 {
00282 printf(" Addr:%08lX ",(long int)address);
00283 if (func_name==NULL)
00284 printf("Ordinal:%u(%04X)\n",hint,hint);
00285 else
00286 printf("hint:%u(%04X) Name:%s\n",hint,hint,func_name);
00287 }
00288 }
|
|
|
Definition at line 103 of file pefile.cpp. References _PE_IMAGE_FILE_HEADER::Characteristics, IMAGE_FILE_32BIT_MACHINE, IMAGE_FILE_BYTES_REVERSED_HI, IMAGE_FILE_BYTES_REVERSED_LO, IMAGE_FILE_DEBUG_STRIPPED, IMAGE_FILE_DLL, IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LINE_NUMS_STRIPPED, IMAGE_FILE_LOCAL_SYMS_STRIPPED, IMAGE_FILE_NET_RUN_FROM_SWAP, IMAGE_FILE_RELOCS_STRIPPED, IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP, IMAGE_FILE_SYSTEM, _PE_IMAGE_FILE_HEADER::Machine, _PE_IMAGE_FILE_HEADER::NumberOfSections, _PE_IMAGE_FILE_HEADER::NumberOfSymbols, _PE_IMAGE_FILE_HEADER::PointerToSymbolTable, _PE_IMAGE_FILE_HEADER::SizeOfOptionalHeader, and _PE_IMAGE_FILE_HEADER::TimeDateStamp. Referenced by main().
00104 {
00105 #define FIELD "%-30s"
00106 const char *machine = "Unknown";
00107 switch (hdr.Machine) {
00108 default:
00109 case IMAGE_FILE_MACHINE_UNKNOWN:
00110 break;
00111 case IMAGE_FILE_MACHINE_I386: machine = "I386"; break;
00112 case IMAGE_FILE_MACHINE_R3000: machine = "R3000"; break;
00113 case IMAGE_FILE_MACHINE_R4000: machine = "R4000"; break;
00114 case IMAGE_FILE_MACHINE_R10000: machine = "R10000"; break;
00115 case IMAGE_FILE_MACHINE_ALPHA: machine = "Alpha"; break;
00116 case IMAGE_FILE_MACHINE_POWERPC: machine = "PowerPC"; break;
00117 }
00118 printf("File header information\n\n");
00119 printf(FIELD "%s\n","Machine",machine);
00120 printf(FIELD "%u\n","Section #",hdr.NumberOfSections);
00121 printf(FIELD "%08X\n","TimeStamp",hdr.TimeDateStamp);
00122 printf(FIELD "%08X\n","SymbolTable pointer",hdr.PointerToSymbolTable);
00123 printf(FIELD "%u\n","Symbol #",hdr.NumberOfSymbols);
00124 printf(FIELD "%u\n","Optional header size",hdr.SizeOfOptionalHeader);
00125 uint_fast16_t car = hdr.Characteristics;
00126 printf("Characteristics %X\n",(int)car);
00127 if ( car&IMAGE_FILE_RELOCS_STRIPPED )
00128 printf(" Relocation info stripped from file\n");
00129 if ( car&IMAGE_FILE_EXECUTABLE_IMAGE )
00130 printf(" File is executable\n");
00131 if ( car&IMAGE_FILE_LINE_NUMS_STRIPPED )
00132 printf(" Line nunbers stripped from file\n");
00133 if ( car&IMAGE_FILE_LOCAL_SYMS_STRIPPED )
00134 printf(" Local symbols stripped from file\n");
00135 if ( car&IMAGE_FILE_BYTES_REVERSED_LO )
00136 printf(" Bytes of machine word are reversed\n");
00137 if ( car&IMAGE_FILE_32BIT_MACHINE )
00138 printf(" 32 bit word machine\n");
00139 if ( car&IMAGE_FILE_DEBUG_STRIPPED )
00140 printf(" Debugging info stripped from file in .DBG file\n");
00141 if ( car&IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP )
00142 printf(" If Image is on removable media, copy and run from the swap file\n");
00143 if ( car&IMAGE_FILE_NET_RUN_FROM_SWAP )
00144 printf(" If Image is on Net, copy and run from the swap file\n");
00145 if ( car&IMAGE_FILE_SYSTEM )
00146 printf(" System File\n");
00147 if ( car&IMAGE_FILE_DLL )
00148 printf(" File is a DLL\n");
00149 if ( car&IMAGE_FILE_BYTES_REVERSED_HI )
00150 printf(" Bytes of machine word are reversed\n");
00151 printf("\n");
00152 #undef FIELD
00153 }
|
|
||||||||||||||||||||||||
|
Definition at line 253 of file pefile.cpp. References ApiCache::GetFullApiName(). Referenced by main().
00254 {
00255 if (address == 0)
00256 printf("\nDLL: %s\n",dll_name);
00257 else
00258 {
00259 printf(" Addr:%08lX ",(long int)address);
00260 if (func_name==NULL)
00261 {
00262 std::string name;
00263 if (ApiCache::GetFullApiName(name,dll_name,hint))
00264 printf("Ordinal:%u(%04X) (%s)\n",hint,hint,name.c_str());
00265 else
00266 printf("Ordinal:%u(%04X)\n",hint,hint);
00267 }
00268 else
00269 printf("hint:%u(%04X) Name:%s\n",hint,hint,func_name);
00270 }
00271 }
|
|
|
||||||||||||||||
|
Definition at line 449 of file pefile.cpp. References IMAGE_REL_BASED_ABSOLUTE, IMAGE_REL_BASED_HIGH, IMAGE_REL_BASED_HIGHADJ, IMAGE_REL_BASED_HIGHLOW, and IMAGE_REL_BASED_LOW. Referenced by main(), and ParseRelocations().
00450 {
00451 printf("%08lX ",(long int)address);
00452 switch(type)
00453 {
00454 case IMAGE_REL_BASED_ABSOLUTE:
00455 printf("Absolute\n"); break;
00456 case IMAGE_REL_BASED_HIGH:
00457 printf("Relative High\n"); break;
00458 case IMAGE_REL_BASED_LOW:
00459 printf("Relative Low\n"); break;
00460 case IMAGE_REL_BASED_HIGHLOW:
00461 printf("Relative HighLow\n"); break;
00462 case IMAGE_REL_BASED_HIGHADJ:
00463 printf("Relative HighAdj\n"); break;
00464 default:
00465 printf("Unknown\n"); break;
00466 }
00467 }
|
|
|
Definition at line 745 of file pefile.cpp. References ParseResource(), and WriteResource(). Referenced by main(), and WriteResource().
00746 {
00747 ParseResource(::WriteResource,NULL);
00748 }
|
|
|
Definition at line 202 of file pefile.cpp. References _PE_IMAGE_SECTION_HEADER::Characteristics, IMAGE_SCN_ALIGN_16BYTES, IMAGE_SCN_ALIGN_1BYTES, IMAGE_SCN_ALIGN_2BYTES, IMAGE_SCN_ALIGN_32BYTES, IMAGE_SCN_ALIGN_4BYTES, IMAGE_SCN_ALIGN_64BYTES, IMAGE_SCN_ALIGN_8BYTES, IMAGE_SCN_CNT_CODE, IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_NRELOC_OVFL, IMAGE_SCN_LNK_REMOVE, IMAGE_SCN_MEM_16BIT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_FARDATA, IMAGE_SCN_MEM_LOCKED, IMAGE_SCN_MEM_NOT_CACHED, IMAGE_SCN_MEM_NOT_PAGED, IMAGE_SCN_MEM_PRELOAD, IMAGE_SCN_MEM_PURGEABLE, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_SHARED, IMAGE_SCN_MEM_WRITE, _PE_IMAGE_SECTION_HEADER::Misc, _PE_IMAGE_SECTION_HEADER::Name, _PE_IMAGE_SECTION_HEADER::NumberOfLinenumbers, _PE_IMAGE_SECTION_HEADER::NumberOfRelocations, _PE_IMAGE_SECTION_HEADER::PointerToLinenumbers, _PE_IMAGE_SECTION_HEADER::PointerToRawData, _PE_IMAGE_SECTION_HEADER::PointerToRelocations, _PE_IMAGE_SECTION_HEADER::SizeOfRawData, and _PE_IMAGE_SECTION_HEADER::VirtualAddress. Referenced by main().
00203 {
00204 #define FIELD "%-30s"
00205 printf(FIELD "%-8.8s\n","Name",hdr.Name);
00206 printf(FIELD "%08X\n","PhysicalAddress",hdr.Misc.PhysicalAddress);
00207 printf(FIELD "%08X\n","VirtualAddress",hdr.VirtualAddress);
00208 printf(FIELD "%08X\n","Size of raw data",hdr.SizeOfRawData);
00209 printf(FIELD "%08X\n","Pointer to raw data",hdr.PointerToRawData);
00210 printf(FIELD "%08X\n","Pointer to relocations",hdr.PointerToRelocations);
00211 printf(FIELD "%08X\n","Pointer to linenumbers",hdr.PointerToLinenumbers);
00212 printf(FIELD "%04X\n","Number of relocations",hdr.NumberOfRelocations);
00213 printf(FIELD "%04X\n","Number of line numbers",hdr.NumberOfLinenumbers);
00214
00215 printf("Characteristics\n");
00216 uint32_t car = hdr.Characteristics;
00217 if ( car&IMAGE_SCN_CNT_CODE ) printf(" Section contains code\n");
00218 if ( car&IMAGE_SCN_CNT_INITIALIZED_DATA ) printf(" Section contains initialized data\n");
00219 if ( car&IMAGE_SCN_CNT_UNINITIALIZED_DATA ) printf(" Section contains uninitialized data\n");
00220 if ( car&IMAGE_SCN_LNK_INFO ) printf(" Section contains comments or some other type of information\n");
00221 if ( car&IMAGE_SCN_LNK_REMOVE ) printf(" Section contents will not become part of image\n");
00222 if ( car&IMAGE_SCN_LNK_COMDAT ) printf(" Section contents comdat\n");
00223
00224 if ( car&IMAGE_SCN_MEM_FARDATA ) printf(" FarData\n");
00225 if ( car&IMAGE_SCN_MEM_PURGEABLE ) printf(" Purgeable\n");
00226 if ( car&IMAGE_SCN_MEM_16BIT ) printf(" 16bit\n");
00227 if ( car&IMAGE_SCN_MEM_LOCKED ) printf(" Locked\n");
00228 if ( car&IMAGE_SCN_MEM_PRELOAD ) printf(" Preload\n");
00229
00230 if ( car&IMAGE_SCN_ALIGN_1BYTES ) printf(" Align 1 byte\n");
00231 if ( car&IMAGE_SCN_ALIGN_2BYTES ) printf(" Align 2 bytes\n");
00232 if ( car&IMAGE_SCN_ALIGN_4BYTES ) printf(" Align 4 bytes\n");
00233 if ( car&IMAGE_SCN_ALIGN_8BYTES ) printf(" Align 8 bytes\n");
00234 if ( car&IMAGE_SCN_ALIGN_16BYTES ) printf(" Align 16 bytes\n");
00235 if ( car&IMAGE_SCN_ALIGN_32BYTES ) printf(" Align 32 bytes\n");
00236 if ( car&IMAGE_SCN_ALIGN_64BYTES ) printf(" Align 64 bytes\n");
00237
00238 if ( car&IMAGE_SCN_LNK_NRELOC_OVFL ) printf(" Section contains extended relocations\n");
00239 if ( car&IMAGE_SCN_MEM_DISCARDABLE ) printf(" Discardable\n");
00240 if ( car&IMAGE_SCN_MEM_NOT_CACHED ) printf(" Not cachable\n");
00241 if ( car&IMAGE_SCN_MEM_NOT_PAGED ) printf(" Not pageable\n");
00242 if ( car&IMAGE_SCN_MEM_SHARED ) printf(" Shareable\n");
00243 if ( car&IMAGE_SCN_MEM_EXECUTE ) printf(" Executable\n");
00244 if ( car&IMAGE_SCN_MEM_READ ) printf(" Readable\n");
00245 if ( car&IMAGE_SCN_MEM_WRITE ) printf(" Writeable\n");
00246 printf("\n");
00247 #undef FIELD
00248 }
|
|
|
Definition at line 115 of file pefile.hpp. Referenced by ParseExport(), ParseImport(), ParseRelocations(), ParseResource(), and PeFile(). |
|
|
Definition at line 112 of file pefile.hpp. Referenced by GetFileHeader(), GetOptionalHeader(), and PeFile(). |
|
|
Definition at line 114 of file pefile.hpp. Referenced by GetSectionCount(), and PeFile(). |
|
|
Definition at line 117 of file pefile.hpp. |
|
|
Definition at line 113 of file pefile.hpp. Referenced by GetSection(), GetSections(), PeFile(), and ~PeFile(). |
1.2.15