Advertisement
Guest User

Untitled

a guest
Dec 12th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. IncludeFile "Pb_PeExplorer.Pbi"
  2.  
  3. Structure VS_VERSION_INFO
  4.   wLength.u;
  5.   wValueLength.u;
  6.   wType.u       ;
  7.   szKey.u[15]   ;
  8.   Padding1.u[2] ;
  9.   Value.VS_FIXEDFILEINFO;
  10.                         ;   Padding2.u            ;
  11.                         ;   Children.u            ;
  12. EndStructure
  13.  
  14. Macro HiWord(a)
  15.   (a>>16 & $ffff)
  16. EndMacro
  17.  
  18. Macro LowWord(a)
  19.   (a & $ffff)
  20. EndMacro
  21.  
  22. EnableExplicit
  23.  
  24. #File_Info="File Info"
  25. #DOS_HEADER="DOS_HEADER"
  26. #IMAGE_NT_HEADERS="IMAGE_NT_HEADERS"
  27. #FILE_HEADER="FILE_HEADER"
  28. #OPTIONAL_HEADER="OPTIONAL_HEADER"
  29. #SECTION_HEADER="SECTION_HEADER"
  30. #DESCRIPTOR_IMPORT="DESCRIPTOR_IMPORT"
  31. #DESCRIPTOR_EXPORT="DESCRIPTOR_EXPORT"
  32. #DESCRIPTOR_RESOURCE="DESCRIPTOR_RESOURCE"
  33. #DESCRIPTOR_RELOCATION="DESCRIPTOR_RELOCATION"
  34. #ENDOFDATA="+Overlay"
  35.  
  36. Enumeration Window_PeExplorer
  37.   #Window_PeExplorer
  38. EndEnumeration
  39.  
  40. Enumeration Window_Gadget_PeExplorer
  41.   #Gadget_ListIcon_PeExplorer
  42.   #Gadget_Tree_PeExplorer
  43.   #Gadget_Splitter_PeExplorer
  44. EndEnumeration
  45.  
  46. Enumeration FormMenu_PeExplorer
  47.   #Menu_Window_PeExplorer
  48. EndEnumeration
  49.  
  50. Enumeration FormMenuItem_PeExplorer
  51.   #MenuItem_SelectFile
  52. EndEnumeration
  53.  
  54. Enumeration FormStatusBar_PeExplorer
  55.   #StatusBar_PeExplorer
  56. EndEnumeration
  57.  
  58. Enumeration FormStatusBarItem_PeExplorer
  59.   #StatusBarItem_PeInfo
  60.   #StatusBarItem_PeProgress
  61. EndEnumeration
  62.  
  63. Global CurrentPB_PEExplorerFile.PB_PEExplorer
  64. Global CurrentFileLoc.s{#MAX_PATH}
  65.  
  66. Procedure.s GetShortPathName(lpszLongPath.s)
  67.   Protected lpszShortPath.s{#MAX_PATH}
  68.   GetShortPathName_(@lpszLongPath,@lpszShortPath,#MAX_PATH)
  69.   ProcedureReturn lpszShortPath
  70. EndProcedure
  71. Procedure.s FindFile(Pthdll$,aDll$,SubDirCount.l=0,Pcall.b=1)
  72.   Protected iReturn$,DirectoryEntryName$
  73.   Protected ed=ExamineDirectory(#PB_Any, Pthdll$, "*.*")  
  74.   If ed
  75.     While NextDirectoryEntry(ed)
  76.       DirectoryEntryName$=DirectoryEntryName(ed)
  77.       If DirectoryEntryType(ed) = #PB_DirectoryEntry_File
  78.         If  FindString(DirectoryEntryName$, aDll$,1,#PB_String_NoCase)
  79.           iReturn$ = Pthdll$ + "\" + aDll$
  80.         EndIf
  81.       ElseIf SubDirCount < 5
  82.         If DirectoryEntryName$="." Or DirectoryEntryName$=".." :Continue:EndIf
  83.         SubDirCount+1
  84.         iReturn$=FindFile(Pthdll$+"\" + DirectoryEntryName$,aDll$,SubDirCount,0)
  85.       Else
  86.         If Pcall=1
  87.           SubDirCount=0
  88.         EndIf
  89.       EndIf
  90.       If iReturn$:Break:EndIf
  91.     Wend
  92.     FinishDirectory(ed)
  93.   EndIf
  94.   ProcedureReturn iReturn$
  95. EndProcedure
  96.  
  97. Macro AddList(strlist,s)
  98.   AddElement(strlist):strlist = s
  99. EndMacro
  100. Procedure ResizeGadgetsWindow_PeExplorer()
  101.   Protected FormWindowWidth, FormWindowHeight
  102.   FormWindowWidth = WindowWidth(#Window_PeExplorer)
  103.   FormWindowHeight = WindowHeight(#Window_PeExplorer)
  104.   ResizeGadget(#Gadget_Splitter_PeExplorer, 5, 5, FormWindowWidth-10, FormWindowHeight - MenuHeight() - StatusBarHeight(#StatusBar_PeExplorer) - 10)
  105. EndProcedure
  106. Procedure CloseWindow_PeExplorer()
  107.   End
  108. EndProcedure
  109. Procedure LoadPlugins_PeExplorer()
  110.   Protected ed=ExamineDirectory(#PB_Any, "Plugin", "*.dll")  
  111.   If ed
  112.     While NextDirectoryEntry(ed)
  113.       If DirectoryEntryType(ed) = #PB_DirectoryEntry_File
  114.         Protected ol=OpenLibrary(#PB_Any,"Plugin\"+DirectoryEntryName(ed))
  115.         If ol
  116.           If Not CallFunction(ol,"PeExplorer_Plugin_Ini",WindowID(#Window_PeExplorer),@CurrentFileLoc)
  117.             CloseLibrary(ol)
  118.           EndIf
  119.         EndIf
  120.       EndIf
  121.     Wend
  122.     FinishDirectory(ed)
  123.   EndIf
  124. EndProcedure
  125.  
  126. Procedure.s Pex_Hex_Value(Value.q,Type.l, Addx.s="0x")
  127.   Protected slong.l
  128.   Select Type
  129.     Case #PB_Byte
  130.       slong=2
  131.     Case #PB_Word
  132.       slong=4
  133.     Case #PB_Long
  134.       slong=8
  135.     Case #PB_Quad
  136.       slong=16
  137.   EndSelect
  138.   ProcedureReturn Addx+RSet (Hex(Value,Type),slong,"0")
  139. EndProcedure
  140. Procedure.s Pex_Resource_Type (nRes.u)
  141.   Select nRes
  142.     Case #RT_ACCELERATOR:ProcedureReturn "#RT_ACCELERATOR"
  143.     Case #RT_ANICURSOR:ProcedureReturn "#RT_ANICURSOR"
  144.     Case #RT_ANIICON:ProcedureReturn "#RT_ANIICON"
  145.     Case #RT_BITMAP:ProcedureReturn "#RT_BITMAP"
  146.     Case #RT_CURSOR:ProcedureReturn "#RT_CURSOR"
  147.     Case #RT_DIALOG:ProcedureReturn "#RT_DIALOG"
  148.     Case #RT_DLGINCLUDE:ProcedureReturn "#RT_DLGINCLUDE"
  149.     Case #RT_FONT:ProcedureReturn "#RT_FONT"
  150.     Case #RT_FONTDIR:ProcedureReturn "#RT_FONTDIR"
  151.     Case #RT_GROUP_CURSOR:ProcedureReturn "#RT_GROUP_CURSOR"
  152.     Case #RT_GROUP_ICON:ProcedureReturn "#RT_GROUP_ICON"
  153.     Case #RT_HTML:ProcedureReturn "#RT_HTML"
  154.     Case #RT_ICON:ProcedureReturn "#RT_ICON"
  155.     Case #RT_MANIFEST:ProcedureReturn "#RT_MANIFEST"
  156.     Case #RT_MENU:ProcedureReturn "#RT_MENU"
  157.     Case #RT_MESSAGETABLE:ProcedureReturn "#RT_MESSAGETABLE"
  158.     Case #RT_PLUGPLAY:ProcedureReturn "#RT_PLUGPLAY"
  159.     Case #RT_RCDATA:ProcedureReturn "#RT_RCDATA"
  160.     Case #RT_STRING:ProcedureReturn "#RT_STRING"
  161.     Case #RT_VERSION:ProcedureReturn "#RT_VERSION"
  162.     Case #RT_VXD:ProcedureReturn "#RT_VXD"
  163.   EndSelect
  164.   ProcedureReturn Str(nRes)
  165. EndProcedure
  166. Procedure.s Pex_Machine_Type(Machine.u)
  167.   Select Machine
  168.     Case #IMAGE_FILE_MACHINE_I386:ProcedureReturn "X86"
  169.     Case #IMAGE_FILE_MACHINE_IA64:ProcedureReturn "Intel Itanium"
  170.     Case #IMAGE_FILE_MACHINE_AMD64:ProcedureReturn "X64"
  171.   EndSelect
  172. EndProcedure
  173. Procedure.s Pex_Exe_Type(Characteristics.u)
  174.   If Characteristics &#IMAGE_FILE_DLL = #IMAGE_FILE_DLL
  175.     ProcedureReturn "Image is a DLL"
  176.   ElseIf Characteristics &#IMAGE_FILE_EXECUTABLE_IMAGE = #IMAGE_FILE_EXECUTABLE_IMAGE
  177.     ProcedureReturn "Image is a EXE"
  178.   EndIf
  179. EndProcedure
  180. Procedure.s Pex_Image_Type(Magic.u)
  181.   Select Magic
  182.     Case #IMAGE_NT_OPTIONAL_HDR32_MAGIC
  183.       ProcedureReturn "32bit"
  184.     Case #IMAGE_NT_OPTIONAL_HDR64_MAGIC
  185.       ProcedureReturn "64bit"
  186.     Case #IMAGE_ROM_OPTIONAL_HDR_MAGIC
  187.       ProcedureReturn "Rom image"
  188.   EndSelect
  189. EndProcedure
  190.  
  191. Structure ImageFile_Type
  192.   Characteristics.u
  193.   Desc.s
  194. EndStructure
  195.  
  196. Procedure.s Pex_ImageFile_Type(Characteristics.w)
  197.   Dim aImageFile_Type.ImageFile_Type(14)
  198.  
  199.   aImageFile_Type(0)\Characteristics = #IMAGE_FILE_RELOCS_STRIPPED
  200.   aImageFile_Type(1)\Characteristics = #IMAGE_FILE_EXECUTABLE_IMAGE
  201.   aImageFile_Type(2)\Characteristics = #IMAGE_FILE_LINE_NUMS_STRIPPED
  202.   aImageFile_Type(3)\Characteristics = #IMAGE_FILE_LOCAL_SYMS_STRIPPED
  203.   aImageFile_Type(4)\Characteristics = #IMAGE_FILE_AGGRESIVE_WS_TRIM
  204.   aImageFile_Type(5)\Characteristics = #IMAGE_FILE_LARGE_ADDRESS_AWARE
  205.   aImageFile_Type(6)\Characteristics = #IMAGE_FILE_BYTES_REVERSED_LO
  206.   aImageFile_Type(7)\Characteristics = #IMAGE_FILE_32BIT_MACHINE
  207.   aImageFile_Type(8)\Characteristics = #IMAGE_FILE_DEBUG_STRIPPED
  208.   aImageFile_Type(9)\Characteristics = #IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
  209.   aImageFile_Type(10)\Characteristics = #IMAGE_FILE_NET_RUN_FROM_SWAP
  210.   aImageFile_Type(11)\Characteristics = #IMAGE_FILE_SYSTEM
  211.   aImageFile_Type(12)\Characteristics = #IMAGE_FILE_DLL
  212.   aImageFile_Type(13)\Characteristics = #IMAGE_FILE_UP_SYSTEM_ONLY
  213.   aImageFile_Type(14)\Characteristics = #IMAGE_FILE_BYTES_REVERSED_HI
  214.   aImageFile_Type(0)\Desc = "IMAGE_FILE_RELOCS_STRIPPED"
  215.   aImageFile_Type(1)\Desc = "IMAGE_FILE_EXECUTABLE_IMAGE"
  216.   aImageFile_Type(2)\Desc = "IMAGE_FILE_LINE_NUMS_STRIPPED"
  217.   aImageFile_Type(3)\Desc = "IMAGE_FILE_LOCAL_SYMS_STRIPPED"
  218.   aImageFile_Type(4)\Desc = "IMAGE_FILE_AGGRESIVE_WS_TRIM"
  219.   aImageFile_Type(5)\Desc = "IMAGE_FILE_LARGE_ADDRESS_AWARE"
  220.   aImageFile_Type(6)\Desc = "IMAGE_FILE_BYTES_REVERSED_LO"
  221.   aImageFile_Type(7)\Desc = "IMAGE_FILE_32BIT_MACHINE"
  222.   aImageFile_Type(8)\Desc = "IMAGE_FILE_DEBUG_STRIPPED"
  223.   aImageFile_Type(9)\Desc = "IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP"
  224.   aImageFile_Type(10)\Desc = "IMAGE_FILE_NET_RUN_FROM_SWAP"
  225.   aImageFile_Type(11)\Desc = "IMAGE_FILE_SYSTEM"
  226.   aImageFile_Type(12)\Desc = "IMAGE_FILE_DLL"
  227.   aImageFile_Type(13)\Desc = "IMAGE_FILE_UP_SYSTEM_ONLY"
  228.   aImageFile_Type(14)\Desc = "IMAGE_FILE_BYTES_REVERSED_HI"
  229.  
  230.   Protected sReturn.s,o
  231.   For o = 0 To 14
  232.     If aImageFile_Type(o)\Characteristics & Characteristics = aImageFile_Type(o)\Characteristics
  233.       sReturn + aImageFile_Type(o)\Desc + " | "
  234.     EndIf
  235.   Next
  236.   ProcedureReturn Mid(sReturn,1,Len(sReturn) - 3)
  237. EndProcedure
  238.  
  239. Procedure.s Pex_Subsystem_Type(Subsystem.u)
  240.   Select Subsystem
  241.     Case #IMAGE_SUBSYSTEM_NATIVE
  242.       ProcedureReturn "Subsystem : native"
  243.     Case #IMAGE_SUBSYSTEM_WINDOWS_GUI
  244.       ProcedureReturn "Subsystem : Windows GUI"
  245.     Case #IMAGE_SUBSYSTEM_WINDOWS_CUI
  246.       ProcedureReturn "Subsystem : Windows CUI"
  247.     Case #IMAGE_SUBSYSTEM_OS2_CUI
  248.       ProcedureReturn "Subsystem :  OS2."
  249.     Case #IMAGE_SUBSYSTEM_POSIX_CUI
  250.       ProcedureReturn "Subsystem :  Posix."
  251.     Case #IMAGE_SUBSYSTEM_WINDOWS_CE_GUI
  252.       ProcedureReturn "Subsystem :  Windows CE."
  253.     Case #IMAGE_SUBSYSTEM_EFI_APPLICATION
  254.       ProcedureReturn "Subsystem :  Extensible Firmware Interface."
  255.     Case #IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER
  256.       ProcedureReturn "Subsystem :  Extensible Firmware Interface."
  257.     Case #IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
  258.       ProcedureReturn "Subsystem :  Extensible Firmware Interface."
  259.     Case #IMAGE_SUBSYSTEM_EFI_ROM
  260.       ProcedureReturn "Subsystem :  Extensible Firmware Interface."
  261.     Case #IMAGE_SUBSYSTEM_XBOX
  262.       ProcedureReturn "Subsystem : Xbox."
  263.     Case #IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION
  264.       ProcedureReturn "Subsystem :  Boot Application."
  265.     Default
  266.       ProcedureReturn "unknown Subsystem"
  267.   EndSelect
  268. EndProcedure
  269. Procedure.s Pex_Dll_Characteristics(DllCharacteristics.u)
  270.   Select DllCharacteristics
  271.     Case  #IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
  272.       ProcedureReturn "The DLL can be relocated at load time."
  273.     Case #IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY
  274.       ProcedureReturn "Code integrity checks are forced."
  275.     Case #IMAGE_DLLCHARACTERISTICS_NX_COMPAT
  276.       ProcedureReturn "The image is compatible With Data execution prevention (DEP)."
  277.     Case #IMAGE_DLLCHARACTERISTICS_NO_ISOLATION
  278.       ProcedureReturn "The image is isolation aware, but should Not be isolated."
  279.     Case   #IMAGE_DLLCHARACTERISTICS_NO_SEH
  280.       ProcedureReturn "The image does Not use structured exception handling (SEH)."
  281.     Case #IMAGE_DLLCHARACTERISTICS_NO_BIND
  282.       ProcedureReturn "Do Not bind the image"
  283.     Case #IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
  284.       ProcedureReturn "A WDM driver"
  285.     Case #IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE
  286.       ProcedureReturn "The image is terminal server aware."
  287.   EndSelect
  288. EndProcedure
  289. Procedure.s Pex_HexRawData_Read(ResOffset.l,ResSize.l,ReadSize.l,ReturnHex.b=1)
  290.   Protected Rd = ReadFile(#PB_Any, CurrentFileLoc)
  291.   If Rd
  292.     If ReadSize >= ResSize:ReadSize=ResSize:EndIf
  293.     If ReadSize > 0 And ResOffset > 0 And ResOffset + ReadSize <= Lof(Rd)
  294.       FileSeek(Rd,ResOffset)
  295.       Protected u.l,pb.a,Returna$ ,Returns$
  296.       For u=1 To ReadSize
  297.         pb = ReadAsciiCharacter(Rd)
  298.         Returna$ + Pex_Hex_Value(pb,#PB_Byte,"") + "  "
  299.         If pb=0:pb=Asc("."):EndIf
  300.         Returns$ + Chr(pb)
  301.       Next
  302.     EndIf
  303.     CloseFile(Rd)
  304.   EndIf
  305.   If ReturnHex
  306.     ProcedureReturn Returna$
  307.   EndIf
  308.   ProcedureReturn Returns$
  309. EndProcedure
  310. Procedure.i Pex_MemRawData_Read(ResOffset.l,ReadSize.l)
  311.   Protected Rd = ReadFile(#PB_Any, CurrentFileLoc)
  312.   If Rd
  313.     If ReadSize > 0 And ResOffset > 0 And ResOffset + ReadSize <= Lof(Rd)
  314.       Protected *Almem=AllocateMemory(ReadSize)
  315.       If *Almem
  316.         FileSeek(Rd,ResOffset)
  317.         ReadData(Rd,*Almem,ReadSize)
  318.       EndIf
  319.     EndIf
  320.     CloseFile(Rd)
  321.   EndIf
  322.   ProcedureReturn *Almem
  323. EndProcedure
  324. Procedure.b Pex_UpxPacker_Detect()
  325.   Protected IspUpx.b
  326.   With CurrentPB_PEExplorerFile
  327.     ForEach \IMAGE_SECTION_HEADERList()
  328.       If Left(\IMAGE_SECTION_HEADERList()\__File_Selction_Name,3) = "UPX"
  329.         IspUpx+1
  330.       EndIf
  331.     Next
  332.   EndWith
  333.   ProcedureReturn IspUpx
  334. EndProcedure
  335. Procedure.b Pex_UpxPacker_UnPacked()
  336.   Protected ru,Sortie$,Rderr$
  337.   If MessageRequester("","UPX packer Detected.. "+#CRLF$ + "Do you want decompress file !", #PB_MessageRequester_YesNo)<>#PB_MessageRequester_Yes
  338.     ProcedureReturn
  339.   EndIf
  340.   If FileSize("upx.exe") < 1
  341.     ProcedureReturn MessageRequester("","Upx.exe not found!")
  342.   EndIf
  343.   ru=RunProgram("upx","-d " + GetShortPathName(CurrentFileLoc), GetCurrentDirectory(), #PB_Program_Open | #PB_Program_Read |#PB_Program_Error|#PB_Program_Hide)
  344.   If ru
  345.     While ProgramRunning(ru)
  346.       If AvailableProgramOutput(ru)
  347.         ReadProgramString(ru)
  348.         Rderr$=ReadProgramError(ru)
  349.         If Rderr$
  350.           Sortie$ + Rderr$ + Chr(13)
  351.         EndIf
  352.       EndIf
  353.     Wend
  354.     If ProgramExitCode(ru)=1
  355.       MessageRequester("UPX Error!",Sortie$)
  356.       ProcedureReturn 0
  357.     EndIf
  358.     ProcedureReturn 1
  359.   EndIf
  360. EndProcedure
  361. Procedure.s Pex_DLL_FindPath(aDll$)
  362.   Protected WindowsDirectory.s{#MAX_PATH},SystemWindowsDirectory.s{#MAX_PATH}
  363.   GetWindowsDirectory_(@WindowsDirectory,#MAX_PATH)
  364.   GetSystemDirectory_(@SystemWindowsDirectory,#MAX_PATH)
  365.   If FileSize(WindowsDirectory+"\"+aDll$) > 0
  366.     ProcedureReturn WindowsDirectory+"\"+aDll$
  367.   EndIf
  368.   If FileSize(SystemWindowsDirectory+"\"+aDll$) > 0
  369.     ProcedureReturn SystemWindowsDirectory+"\"+aDll$
  370.   EndIf
  371.   Protected DllPath.s{#MAX_PATH}
  372.   Protected lb,CloseLib.b
  373.   lb=  GetModuleHandle_(aDll$)
  374.   If Not lb
  375.     lb=LoadLibraryEx_(aDll$,0,$00000001)
  376.     CloseLib = 1
  377.   EndIf
  378.   If lb
  379.     GetModuleFileName_(lb,@DllPath,#MAX_PATH)
  380.     If CloseLib
  381.       FreeLibrary_(lb)
  382.     EndIf
  383.     If DllPath
  384.       ProcedureReturn DllPath
  385.     EndIf
  386.   EndIf
  387.   Protected Pthdll$=RTrim(GetPathPart(CurrentFileLoc),"\")
  388.   If Pthdll$
  389.     Protected iFind$=FindFile(Pthdll$,aDll$)
  390.     If iFind$
  391.       ProcedureReturn iFind$
  392.     EndIf
  393.   EndIf
  394.   ProcedureReturn "?\"+aDll$
  395. EndProcedure
  396. Procedure.s Pex_RawData_Hash(ReadOffset.l=0,ReadSize.l=0)
  397.   Protected Rdf=ReadFile(#PB_Any,CurrentFileLoc)
  398.   If Rdf
  399.     If ReadSize=0:ReadSize=Lof(Rdf):EndIf
  400.     If Lof(Rdf) < ReadOffset+ReadSize:ReadSize=Lof(Rdf)-ReadOffset:EndIf
  401.     If ReadSize < 1 :ProcedureReturn:EndIf
  402.     FileSeek(Rdf,ReadOffset)
  403.     Protected *Dataf=AllocateMemory(1024*64)
  404.     If *Dataf
  405.       UseMD5Fingerprint()
  406.       Protected fmd5 = StartFingerprint(#PB_Any, #PB_Cipher_MD5)
  407.       If fmd5
  408.         Protected Rd.l,iReturn$,irds.l=1024*64,ird.l
  409.         Repeat
  410.           If ird+irds > ReadSize:irds=ReadSize-ird:EndIf
  411.           Rd=ReadData(Rdf,*Dataf,irds)
  412.           AddFingerprintBuffer(fmd5, *Dataf, Rd)  
  413.           ird+Rd
  414.           If ird=ReadSize:Break:EndIf
  415.         ForEver
  416.         iReturn$=  FinishFingerprint(fmd5)
  417.       EndIf
  418.       FreeMemory(*Dataf)
  419.     EndIf
  420.     CloseFile(Rdf)
  421.   EndIf
  422.   ProcedureReturn iReturn$
  423. EndProcedure
  424. Procedure.s Pex_Section_Characteristics(Characteristics.l)
  425.   Protected sReturn.s
  426.   If Characteristics& #IMAGE_SCN_CNT_CODE :sReturn + "CODE + ":EndIf
  427.   If Characteristics&   #IMAGE_SCN_CNT_INITIALIZED_DATA :sReturn + "INITIALIZED_DATA + ":EndIf
  428.   If Characteristics& #IMAGE_SCN_CNT_UNINITIALIZED_DATA :sReturn + "UNINITIALIZED_DATA + ":EndIf
  429.   If Characteristics& #IMAGE_SCN_MEM_SHARED :sReturn + "MEM_SHARED + ":EndIf
  430.   If Characteristics& #IMAGE_SCN_MEM_EXECUTE :sReturn + "MEM_EXECUTE + ":EndIf
  431.   If Characteristics& #IMAGE_SCN_MEM_READ :sReturn + "MEM_READ + ":EndIf
  432.   If Characteristics& #IMAGE_SCN_MEM_WRITE :sReturn + "MEM_WRITE + ":EndIf
  433.   ProcedureReturn Mid(sReturn,1,Len(sReturn)-2)
  434. EndProcedure
  435. Macro Pex_Is64Bit()
  436.   Bool(CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS32\OptionalHeader\Magic  = #IMAGE_NT_OPTIONAL_HDR64_MAGIC)
  437. EndMacro
  438. Procedure.s Pex_Date_Format(lDat.l)
  439.   If lDat > 0
  440.     ProcedureReturn FormatDate("%yyyy/ %mm/ %dd %hh:%ii:%ss",lDat)+" UTC"
  441.   EndIf
  442. EndProcedure
  443.  
  444. Procedure Pex_Resource_Read(ResourceDir.l,ResourceNameStr.s,ResourceNameInt.l,ResourceOffset.l,ResourceSize.l)
  445.   Protected sReturn.s
  446.   Select ResourceDir
  447.     Case #RT_MANIFEST
  448.       Protected *Versionmem =Pex_MemRawData_Read(ResourceOffset,ResourceSize)
  449.       If *Versionmem
  450.         sReturn= PeekS(*Versionmem,ResourceSize,#PB_Ascii)
  451.         FreeMemory(*Versionmem)
  452.       EndIf
  453.     Case #RT_VERSION
  454.       *Versionmem =Pex_MemRawData_Read(ResourceOffset,ResourceSize)
  455.       If *Versionmem
  456.         Protected *vr.VS_VERSION_INFO=*Versionmem
  457.         Protected FileVersion.s= Str(HiWord(*vr\Value\dwFileVersionMS)) +
  458.                                  "." +Str(LowWord(*vr\Value\dwFileVersionMS)) +
  459.                                  "." +Str(HiWord(*vr\Value\dwFileVersionLS)) +
  460.                                  "." + Str(LowWord(*vr\Value\dwFileVersionLS))
  461.         Protected ProductVersion.s= Str(HiWord(*vr\Value\dwProductVersionMS)) +
  462.                                     "." +Str(LowWord(*vr\Value\dwProductVersionMS)) +
  463.                                     "." +Str(HiWord(*vr\Value\dwProductVersionLS)) +
  464.                                     "." + Str(LowWord(*vr\Value\dwProductVersionLS))
  465.        
  466.         sReturn + "<" + PeekS(@*vr\szKey)+ ">" + #CRLF$ + #CRLF$
  467.         sReturn + "      File Version: " + FileVersion + #CRLF$
  468.         sReturn + "      Product Version: " + ProductVersion + #CRLF$
  469.         sReturn + "      Characteristics: " + Pex_Hex_Value(*vr\Value\dwFileType,#PB_Long) + ", " + Pex_Hex_Value(*vr\Value\dwFileOS,#PB_Long) + #CRLF$
  470.        
  471.         Protected ChildrenLen.l
  472.         Protected *cvr.VS_VERSION_INFO
  473.         While ChildrenLen < *vr\wLength-SizeOf(VS_VERSION_INFO)
  474.           *cvr = *vr+SizeOf(VS_VERSION_INFO)+ChildrenLen
  475.           ChildrenLen+*cvr\wLength
  476.           If Mod(ChildrenLen,4)
  477.             ChildrenLen+4-Mod(ChildrenLen,4)
  478.           EndIf
  479.           Select PeekS(@*cvr\szKey)
  480.             Case "StringFileInfo"
  481.               Protected *ccvr.VS_VERSION_INFO=*cvr+36
  482.              
  483.               sReturn + #CRLF$ + "      <StringFileInfo>"            
  484.               Protected szKey.s= PeekS(@*ccvr\szKey)
  485.               sReturn + #CRLF$ +  "          <" + szKey + ">" + #CRLF$
  486.               sReturn + "              Language identifier: " + "0x" + Mid(szKey,1,4)+ #CRLF$
  487.               sReturn + "              Code page: " + "0x" + Mid(szKey,3,4)+ #CRLF$ + #CRLF$
  488.              
  489.               Protected iOffset.l,iPadding.l,iLength.l
  490.               While iOffset < *ccvr\wLength - 24
  491.                 Protected *cccvr.VS_VERSION_INFO=*ccvr+24+iOffset
  492.                 iLength=*cccvr\wLength
  493.                 iPadding=Mod(iLength,4)
  494.                 If iPadding:iLength+4-iPadding:EndIf
  495.                 szKey= PeekS(@*cccvr\szKey)
  496.                 iPadding = 4 - Mod(2 * Len(szKey) + 6, 4)
  497.                
  498.                 sReturn + "                  " + szKey + ": " + PeekS(@*cccvr\szKey+(Len(szKey)*2)+iPadding) +#CRLF$
  499.                
  500.                 iOffset+iLength
  501.               Wend
  502.              
  503.               sReturn + #CRLF$ + "          </" + PeekS(@*ccvr\szKey) + ">"
  504.               sReturn + #CRLF$ + "      </StringFileInfo>" + #CRLF$
  505.              
  506.             Case "VarFileInfo"
  507.               *ccvr=*cvr+32
  508.              
  509.               sReturn + #CRLF$ + "      <VarFileInfo>"
  510.               sReturn + #CRLF$ +  "          <" + PeekS(@*ccvr\szKey) + ">" + #CRLF$
  511.              
  512.               Protected i.l,Val.w
  513.               For i=0 To (*ccvr\wValueLength/2)-1
  514.                 Val= PeekW(*ccvr+32+(2*i))
  515.                
  516.                 If Mod(i,2)
  517.                   sReturn + "              Language identifier: " + Pex_Hex_Value(Val,#PB_Word)  + #CRLF$
  518.                 Else
  519.                   sReturn + "              Code page: " + Pex_Hex_Value(Val,#PB_Word)  + #CRLF$                      
  520.                 EndIf
  521.                
  522.               Next
  523.              
  524.               sReturn + #CRLF$ + "          </" + PeekS(@*ccvr\szKey) + ">"
  525.               sReturn + #CRLF$ + "      </VarFileInfo>" + #CRLF$
  526.              
  527.           EndSelect
  528.         Wend
  529.        
  530.         sReturn + #CRLF$ + "</" + PeekS(@*vr\szKey)+ ">" + #CRLF$      
  531.         FreeMemory(*Versionmem)
  532.       EndIf
  533.   EndSelect
  534.   If sReturn
  535.     MessageRequester("", sReturn)
  536.   EndIf
  537. EndProcedure
  538.  
  539. Procedure.s Pex_Reloc_Type(Type.u)
  540.   Protected sReturn.s
  541.   Select Type
  542.     Case #IMAGE_REL_BASED_ABSOLUTE
  543.       sReturn = "IMAGE_REL_BASED_ABSOLUTE(0)"
  544.     Case #IMAGE_REL_BASED_HIGH
  545.       sReturn = "IMAGE_REL_BASED_HIGH(1)"
  546.     Case #IMAGE_REL_BASED_LOW
  547.       sReturn = "IMAGE_REL_BASED_LOW (2)"
  548.     Case #IMAGE_REL_BASED_HIGHLOW
  549.       sReturn = "IMAGE_REL_BASED_HIGHLOW(3)"
  550.     Case #IMAGE_REL_BASED_HIGHADJ
  551.       sReturn = "IMAGE_REL_BASED_HIGHADJ(4)"
  552.     Case #IMAGE_REL_BASED_MIPS_JMPADDR
  553.       sReturn = "IMAGE_REL_BASED_MIPS_JMPADDR (5)"
  554.     Case #IMAGE_REL_BASED_DIR64
  555.       sReturn = "IMAGE_REL_BASED_DIR64(10)"
  556.   EndSelect
  557.   ProcedureReturn sReturn
  558. EndProcedure
  559.  
  560. Procedure SetInfoHeader_PeExplorer(ItHeader.s,SelectType.s="",ResFileType.s="")
  561.   NewList gilist.s()
  562.   Select ItHeader
  563.     Case #DESCRIPTOR_RELOCATION
  564.       If ResFileType <> ""
  565.        
  566.         With CurrentPB_PEExplorerFile
  567.           ForEach \IMAGE_BASE_RELOCATIONList()
  568.             If Pex_Hex_Value(\IMAGE_BASE_RELOCATIONList()\VirtualAddress,#PB_Long) = SelectType
  569.               ForEach \IMAGE_BASE_RELOCATIONList()\RelocationTypeList()
  570.                 If   Pex_Hex_Value(\IMAGE_BASE_RELOCATIONList()\RelocationTypeList()\u,#PB_Word) = ResFileType
  571.                   Protected RVA = (\IMAGE_BASE_RELOCATIONList()\RelocationTypeList()\u & $0fff) +
  572.                                \IMAGE_BASE_RELOCATIONList()\VirtualAddress  
  573.                   Protected Type = ((\IMAGE_BASE_RELOCATIONList()\RelocationTypeList()\u >> 12) & $000F)
  574.                   AddList(gilist(),"RVA" +Chr(10) + Pex_Hex_Value(RVA,#PB_Long))
  575.                   AddList(gilist(),"Type" +Chr(10) +Pex_Reloc_Type(Type))
  576.                   Break
  577.                 EndIf
  578.               Next
  579.             EndIf
  580.           Next
  581.         EndWith
  582.        
  583.       ElseIf SelectType <> ""
  584.        
  585.         With CurrentPB_PEExplorerFile
  586.           ForEach \IMAGE_BASE_RELOCATIONList()
  587.             If Pex_Hex_Value(\IMAGE_BASE_RELOCATIONList()\VirtualAddress,#PB_Long) = SelectType
  588.               AddList(gilist(),"SizeOfBlock" +Chr(10) + Pex_Hex_Value(\IMAGE_BASE_RELOCATIONList()\SizeOfBlock,#PB_Long) + Chr(10) +
  589.                                Str(\IMAGE_BASE_RELOCATIONList()\SizeOfBlock) + " Byte")
  590.               AddList(gilist(),"Items" +Chr(10) +Str(ListSize(\IMAGE_BASE_RELOCATIONList()\RelocationTypeList())))
  591.               Protected SRVA = \IMAGE_BASE_RELOCATIONList()\VirtualAddress
  592.               Break
  593.             EndIf
  594.           Next
  595.         EndWith
  596.        
  597.         ForEach CurrentPB_PEExplorerFile\IMAGE_SECTION_HEADERList()
  598.           With CurrentPB_PEExplorerFile\IMAGE_SECTION_HEADERList()
  599.             If \VirtualAddress <= SRVA And \VirtualAddress+ \VirtualSize > SRVA
  600.               AddList(gilist(),"Section" +Chr(10) +\__File_Selction_Name)
  601.               Break
  602.             EndIf
  603.           EndWith
  604.         Next
  605.        
  606.       Else
  607.         Protected RelocCount.l
  608.         With CurrentPB_PEExplorerFile
  609.           ForEach \IMAGE_BASE_RELOCATIONList()
  610.             RelocCount+ListSize(\IMAGE_BASE_RELOCATIONList()\RelocationTypeList())
  611.           Next
  612.         EndWith
  613.         AddList(gilist(),"Relocation Count" + Chr(10) + Str(RelocCount))          
  614.       EndIf  
  615.      
  616.     Case#File_Info
  617.       AddList(gilist(),"Name" +Chr(10) + GetFilePart(CurrentFileLoc))
  618.       AddList(gilist(),"Size" +Chr(10) +Str(FileSize(CurrentFileLoc) ) + " Byte")
  619.       AddList(gilist(),"Offset Entry Code" +Chr(10) + Pex_Hex_Value(CurrentPB_PEExplorerFile\__File_OffsetEntryCode,#PB_Long ))
  620.       AddList(gilist(),"MD5 Hash" +Chr(10) + Pex_RawData_Hash())
  621.      
  622.       With CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS32
  623.         StatusBarText(#StatusBar_PeExplorer, #StatusBarItem_PeInfo, (CurrentFileLoc) + " Made for :" + Pex_Machine_Type(\FileHeader\Machine) + "  Machine :" + Pex_Image_Type(\OptionalHeader\Magic))
  624.       EndWith
  625.      
  626.     Case #DOS_HEADER
  627.       With CurrentPB_PEExplorerFile\IMAGE_DOS_HEADER
  628.         AddList(gilist(),"e_magic" + Chr(10) + Pex_Hex_Value(\e_magic,#PB_Word)+ Chr(10) + Chr(PeekA(@\e_magic)) + Chr(PeekA(@\e_magic+1)))
  629.         AddList(gilist(),"e_cblp" + Chr(10) + Pex_Hex_Value(\e_cblp,#PB_Word))
  630.         AddList(gilist(),"e_cp" + Chr(10) + Pex_Hex_Value(\e_cp,#PB_Word))
  631.         AddList(gilist(),"e_crlc" + Chr(10) + Pex_Hex_Value(\e_crlc,#PB_Word))
  632.         AddList(gilist(),"e_cparhdr" + Chr(10) + Pex_Hex_Value(\e_cparhdr,#PB_Word))
  633.         AddList(gilist(),"e_minalloc" + Chr(10) + Pex_Hex_Value(\e_minalloc,#PB_Word))
  634.         AddList(gilist(),"e_maxalloc" + Chr(10) + Pex_Hex_Value(\e_maxalloc,#PB_Word))
  635.         AddList(gilist(),"e_ss" + Chr(10) + Pex_Hex_Value(\e_ss,#PB_Word))
  636.         AddList(gilist(),"e_sp" + Chr(10) + Pex_Hex_Value(\e_sp,#PB_Word))
  637.         AddList(gilist(),"e_csum" + Chr(10) + Pex_Hex_Value(\e_csum,#PB_Word))
  638.         AddList(gilist(),"e_ip" + Chr(10) + Pex_Hex_Value(\e_ip,#PB_Word))
  639.         AddList(gilist(),"e_cs" + Chr(10) + Pex_Hex_Value(\e_cs,#PB_Word))
  640.         AddList(gilist(),"e_lfarlc" + Chr(10) + Pex_Hex_Value(\e_lfarlc,#PB_Word))
  641.         AddList(gilist(),"e_ovno" + Chr(10) + Pex_Hex_Value(\e_ovno,#PB_Word))
  642.         AddList(gilist(),"e_res[0]" + Chr(10) + Pex_Hex_Value(\e_res[0],#PB_Word))
  643.         AddList(gilist(),"e_res[1]" + Chr(10) + Pex_Hex_Value(\e_res[1],#PB_Word))
  644.         AddList(gilist(),"e_res[2]" + Chr(10) + Pex_Hex_Value(\e_res[2],#PB_Word))
  645.         AddList(gilist(),"e_res[3]" + Chr(10) + Pex_Hex_Value(\e_res[3],#PB_Word))
  646.         AddList(gilist(),"e_oemid" + Chr(10) + Pex_Hex_Value(\e_oemid,#PB_Word))
  647.         AddList(gilist(),"e_oeminfo" + Chr(10) + Pex_Hex_Value(\e_oeminfo,#PB_Word))
  648.         AddList(gilist(),"e_res2[0]" + Chr(10) + Pex_Hex_Value(\e_res2[0],#PB_Word))
  649.         AddList(gilist(),"e_res2[1]" + Chr(10) + Pex_Hex_Value(\e_res2[1],#PB_Word))
  650.         AddList(gilist(),"e_res2[2]" + Chr(10) + Pex_Hex_Value(\e_res2[2],#PB_Word))
  651.         AddList(gilist(),"e_res2[3]" + Chr(10) + Pex_Hex_Value(\e_res2[3],#PB_Word))
  652.         AddList(gilist(),"e_res2[4]" + Chr(10) + Pex_Hex_Value(\e_res2[4],#PB_Word))
  653.         AddList(gilist(),"e_res2[5]" + Chr(10) + Pex_Hex_Value(\e_res2[5],#PB_Word))
  654.         AddList(gilist(),"e_res2[6]" + Chr(10) + Pex_Hex_Value(\e_res2[6],#PB_Word))
  655.         AddList(gilist(),"e_res2[7]" + Chr(10) + Pex_Hex_Value(\e_res2[7],#PB_Word))
  656.         AddList(gilist(),"e_res2[8]" + Chr(10) + Pex_Hex_Value(\e_res2[8],#PB_Word))
  657.         AddList(gilist(),"e_res2[9]" + Chr(10) + Pex_Hex_Value(\e_res2[9],#PB_Word))
  658.         AddList(gilist(),"e_lfanew" + Chr(10) + Pex_Hex_Value(\e_lfanew,#PB_Long))
  659.       EndWith
  660.     Case #IMAGE_NT_HEADERS
  661.       With CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS32
  662.         AddList(gilist(),"Signature" + Chr(10) + Pex_Hex_Value(\Signature,#PB_Long)+ Chr(10) + Chr(PeekA(@\Signature)) + Chr(PeekA(@\Signature+1)))
  663.       EndWith
  664.     Case #FILE_HEADER
  665.       With CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS32\FileHeader
  666.         AddList(gilist(),"Machine" + Chr(10) + Pex_Hex_Value(\Machine,#PB_Word)+ Chr(10) + Pex_Machine_Type(\Machine))
  667.         AddList(gilist(),"NumberOfSections" + Chr(10) + Pex_Hex_Value(\NumberOfSections,#PB_Word)) + Chr(10) + \NumberOfSections
  668.         AddList(gilist(),"TimeDateStamp" + Chr(10) + Pex_Hex_Value(\TimeDateStamp,#PB_Long)+ Chr(10) + "Date created : " + Pex_Date_Format(\TimeDateStamp))
  669.         AddList(gilist(),"PointerToSymbolTable" + Chr(10) + Pex_Hex_Value(\PointerToSymbolTable,#PB_Long))
  670.         AddList(gilist(),"NumberOfSymbols" + Chr(10) + Pex_Hex_Value(\NumberOfSymbols,#PB_Long))
  671.         AddList(gilist(),"SizeOfOptionalHeader" + Chr(10) + Pex_Hex_Value(\SizeOfOptionalHeader,#PB_Word))  + Chr(10) + Str(\SizeOfOptionalHeader) + " Byte"
  672.         AddList(gilist(),"Characteristics" + Chr(10) + Pex_Hex_Value(\Characteristics,#PB_Word)+ Chr(10) + Pex_ImageFile_Type(\Characteristics))
  673.       EndWith
  674.     Case #OPTIONAL_HEADER
  675.       With CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS32\OptionalHeader
  676.         AddList(gilist(),"Magic" + Chr(10) + Pex_Hex_Value(\Magic,#PB_Word)+ Chr(10) + Pex_Image_Type(\Magic))
  677.         AddList(gilist(),"MajorLinkerVersion" + Chr(10) + Pex_Hex_Value(\MajorLinkerVersion,#PB_Byte)+ Chr(10) + "Linker Version : " + Str(\MajorLinkerVersion) +"."+ Str( \MinorLinkerVersion))
  678.         AddList(gilist(),"MinorLinkerVersion" + Chr(10) + Pex_Hex_Value(\MinorLinkerVersion,#PB_Byte))
  679.         AddList(gilist(),"SizeOfCode" + Chr(10) + Pex_Hex_Value(\SizeOfCode,#PB_Long))  + Chr(10) + Str(\SizeOfCode) + " Byte"
  680.         AddList(gilist(),"SizeOfInitializedData" + Chr(10) + Pex_Hex_Value(\SizeOfInitializedData,#PB_Long))  + Chr(10) + Str(\SizeOfInitializedData) + " Byte"
  681.         AddList(gilist(),"SizeOfUninitializedData" + Chr(10) + Pex_Hex_Value(\SizeOfUninitializedData,#PB_Long))  + Chr(10) + Str(\SizeOfUninitializedData) + " Byte"
  682.         AddList(gilist(),"AddressOfEntryPoint" + Chr(10) + Pex_Hex_Value(\AddressOfEntryPoint,#PB_Long))  + Chr(10) + Str(\AddressOfEntryPoint)
  683.         AddList(gilist(),"BaseOfCode" + Chr(10) + Pex_Hex_Value(\BaseOfCode,#PB_Long))
  684.         If Pex_Is64Bit()
  685.           AddList(gilist(),"ImageBase" + Chr(10) + Pex_Hex_Value(CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS64\OptionalHeader\ImageBase,#PB_Quad))  + Chr(10) + Str(CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS64\OptionalHeader\ImageBase)
  686.         Else
  687.           AddList(gilist(),"BaseOfData" + Chr(10) + Pex_Hex_Value(\BaseOfData,#PB_Long))
  688.           AddList(gilist(),"ImageBase" + Chr(10) + Pex_Hex_Value(\ImageBase,#PB_Long))  + Chr(10) + Str(\ImageBase)
  689.         EndIf
  690.         AddList(gilist(),"SectionAlignment" + Chr(10) + Pex_Hex_Value(\SectionAlignment,#PB_Long))
  691.         AddList(gilist(),"FileAlignment" + Chr(10) + Pex_Hex_Value(\FileAlignment,#PB_Long))
  692.         AddList(gilist(),"MajorOperatingSystemVersion" + Chr(10) + Pex_Hex_Value(\MajorOperatingSystemVersion,#PB_Word)+ Chr(10) + "Required operating system Version :" + Str(\MajorOperatingSystemVersion) +"."+ Str( \MinorOperatingSystemVersion))
  693.         AddList(gilist(),"MinorOperatingSystemVersion" + Chr(10) + Pex_Hex_Value(\MinorOperatingSystemVersion,#PB_Word))
  694.         AddList(gilist(),"MajorImageVersion" + Chr(10) + Pex_Hex_Value(\MajorImageVersion,#PB_Word)+ Chr(10) + "Image Version : " + Str(\MajorImageVersion) +"."+ Str( \MinorImageVersion))
  695.         AddList(gilist(),"MinorImageVersion" + Chr(10) + Pex_Hex_Value(\MinorImageVersion,#PB_Word))
  696.         AddList(gilist(),"MajorSubsystemVersion" + Chr(10) + Pex_Hex_Value(\MajorSubsystemVersion,#PB_Word)+ Chr(10) + "Subsystem Version : " + Str(\MajorSubsystemVersion) +"."+ Str( \MinorSubsystemVersion))
  697.         AddList(gilist(),"MinorSubsystemVersion" + Chr(10) + Pex_Hex_Value(\MinorSubsystemVersion,#PB_Word))
  698.         AddList(gilist(),"Win32VersionValue" + Chr(10) + Pex_Hex_Value(\Win32VersionValue,#PB_Long))
  699.         AddList(gilist(),"SizeOfImage" + Chr(10) + Pex_Hex_Value(\SizeOfImage,#PB_Long))  + Chr(10) + Str(\SizeOfImage) + " Byte"
  700.         AddList(gilist(),"SizeOfHeaders" + Chr(10) + Pex_Hex_Value(\SizeOfHeaders,#PB_Long))  + Chr(10) + Str(\SizeOfHeaders) + " Byte"
  701.         AddList(gilist(),"CheckSum" + Chr(10) + Pex_Hex_Value(\CheckSum,#PB_Long))
  702.         AddList(gilist(),"Subsystem" + Chr(10) + Pex_Hex_Value(\Subsystem,#PB_Word)+ Chr(10) + Pex_Subsystem_Type(\Subsystem))
  703.         AddList(gilist(),"DllCharacteristics" + Chr(10) + Pex_Hex_Value(\DllCharacteristics,#PB_Word)+ Chr(10) + Pex_Dll_Characteristics(\DllCharacteristics))
  704.         If Pex_Is64Bit()
  705.           AddList(gilist(),"SizeOfStackReserve" + Chr(10) + Pex_Hex_Value(CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS64\OptionalHeader\SizeOfStackReserve,#PB_Quad))
  706.           AddList(gilist(),"SizeOfStackCommit" + Chr(10) + Pex_Hex_Value(CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS64\OptionalHeader\SizeOfStackCommit,#PB_Quad))
  707.           AddList(gilist(),"SizeOfHeapReserve" + Chr(10) + Pex_Hex_Value(CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS64\OptionalHeader\SizeOfHeapReserve,#PB_Quad))
  708.           AddList(gilist(),"SizeOfHeapCommit" + Chr(10) + Pex_Hex_Value(CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS64\OptionalHeader\SizeOfHeapCommit,#PB_Quad))
  709.           AddList(gilist(),"LoaderFlags" + Chr(10) + Pex_Hex_Value(CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS64\OptionalHeader\LoaderFlags,#PB_Long))
  710.           AddList(gilist(),"NumberOfRvaAndSizes" + Chr(10) + Pex_Hex_Value(CurrentPB_PEExplorerFile\IMAGE_NT_HEADERS64\OptionalHeader\NumberOfRvaAndSizes,#PB_Long))
  711.         Else
  712.           AddList(gilist(),"SizeOfStackReserve" + Chr(10) + Pex_Hex_Value(\SizeOfStackReserve,#PB_Long))
  713.           AddList(gilist(),"SizeOfStackCommit" + Chr(10) + Pex_Hex_Value(\SizeOfStackCommit,#PB_Long))
  714.           AddList(gilist(),"SizeOfHeapReserve" + Chr(10) + Pex_Hex_Value(\SizeOfHeapReserve,#PB_Long))
  715.           AddList(gilist(),"SizeOfHeapCommit" + Chr(10) + Pex_Hex_Value(\SizeOfHeapCommit,#PB_Long))
  716.           AddList(gilist(),"LoaderFlags" + Chr(10) + Pex_Hex_Value(\LoaderFlags,#PB_Long))
  717.           AddList(gilist(),"NumberOfRvaAndSizes" + Chr(10) + Pex_Hex_Value(\NumberOfRvaAndSizes,#PB_Long))
  718.         EndIf
  719.       EndWith
  720.     Case #SECTION_HEADER
  721.       If SelectType = #SECTION_HEADER
  722.         With CurrentPB_PEExplorerFile
  723.           AddList(gilist(),"Section count" + Chr(10) + Str(ListSize(\IMAGE_SECTION_HEADERList())))
  724.         EndWith
  725.       Else
  726.         ForEach CurrentPB_PEExplorerFile\IMAGE_SECTION_HEADERList()
  727.           With CurrentPB_PEExplorerFile\IMAGE_SECTION_HEADERList()
  728.             If \__File_Selction_Name = SelectType
  729.               AddList(gilist(),"SecName[8]" + Chr(10) + Pex_Hex_Value(PeekQ(@\SecName),#PB_Quad)+ Chr(10) + SelectType)
  730.               AddList(gilist(),"PhysicalAddr" + Chr(10) + Pex_Hex_Value(\PhysicalAddr,#PB_Long))
  731.               AddList(gilist(),"VirtualSize" + Chr(10) + Pex_Hex_Value(\VirtualSize,#PB_Long))  + Chr(10) + Str(\VirtualSize) + " Byte"
  732.               AddList(gilist(),"VirtualAddress" + Chr(10) + Pex_Hex_Value(\VirtualAddress,#PB_Long))  + Chr(10) + Str(\VirtualAddress)
  733.               AddList(gilist(),"SizeOfRawData" + Chr(10) + Pex_Hex_Value(\SizeOfRawData,#PB_Long))  + Chr(10) + Str(\SizeOfRawData) + " Byte"
  734.               AddList(gilist(),"PointerToRawData" + Chr(10) + Pex_Hex_Value(\PointerToRawData,#PB_Long))  + Chr(10) + Str(\PointerToRawData)
  735.               AddList(gilist(),"PointerToRelocations" + Chr(10) + Pex_Hex_Value(\PointerToRelocations,#PB_Long))
  736.               AddList(gilist(),"PointerToLinenumbers" + Chr(10) + Pex_Hex_Value(\PointerToLinenumbers,#PB_Long))
  737.               AddList(gilist(),"NumberOfRelocations" + Chr(10) + Pex_Hex_Value(\NumberOfRelocations,#PB_Word))
  738.               AddList(gilist(),"NumberOfLinenumbers" + Chr(10) + Pex_Hex_Value(\NumberOfLinenumbers,#PB_Word))
  739.               AddList(gilist(),"Characteristics" + Chr(10) + Pex_Hex_Value(\Characteristics,#PB_Long)+ Chr(10) + Pex_Section_Characteristics(\Characteristics))
  740.               AddList(gilist(),"")            
  741.               AddList(gilist(),"Section MD5 Hash" + Chr(10) +Pex_RawData_Hash(\PointerToRawData,\SizeOfRawData))
  742.               Break
  743.             EndIf
  744.           EndWith
  745.         Next
  746.       EndIf
  747.     Case #DESCRIPTOR_IMPORT
  748.       If ResFileType <> ""
  749.         Protected fUnctioname$
  750.         With CurrentPB_PEExplorerFile\IMAGE_IMPORT_DESCRIPTORInfo
  751.           ForEach \IMAGE_IMPORT_DESCRIPTORList()
  752.             If \IMAGE_IMPORT_DESCRIPTORList()\LibraryName = SelectType
  753.               ForEach \IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()
  754.                 If \IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()\Ordinal
  755.                   If Pex_Is64Bit()
  756.                     fUnctioname$=Pex_Hex_Value(\IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()\Ordinal&$ffffff,#PB_Quad)
  757.                   Else
  758.                     fUnctioname$=Pex_Hex_Value(\IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()\Ordinal&$ffffff,#PB_Long)            
  759.                   EndIf
  760.                 Else
  761.                   fUnctioname$= \IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()\FunctionName              
  762.                 EndIf
  763.                 If fUnctioname$ = ResFileType
  764.                   If \IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()\Ordinal
  765.                     AddList(gilist(),"Ordinal" + Chr(10) + fUnctioname$)
  766.                   Else
  767.                     AddList(gilist(),"Name" + Chr(10) + fUnctioname$)
  768.                   EndIf
  769.                  
  770.                   If Pex_Is64Bit()
  771.                     AddList(gilist(),"IMAGE_THUNK_DATA" + Chr(10) + Pex_Hex_Value(\IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()\IMAGE_THUNK_DATA,#PB_Quad))
  772.                   Else
  773.                     AddList(gilist(),"IMAGE_THUNK_DATA" + Chr(10) + Pex_Hex_Value(\IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()\IMAGE_THUNK_DATA,#PB_Long))
  774.                   EndIf
  775.                  
  776.                   Break
  777.                 EndIf
  778.               Next
  779.               Break
  780.             EndIf
  781.           Next
  782.         EndWith
  783.       ElseIf SelectType <> ""
  784.         With CurrentPB_PEExplorerFile\IMAGE_IMPORT_DESCRIPTORInfo
  785.           ForEach \IMAGE_IMPORT_DESCRIPTORList()
  786.             If \IMAGE_IMPORT_DESCRIPTORList()\LibraryName = SelectType
  787.               AddList(gilist(),"OriginalFirstThunk" + Chr(10) + Pex_Hex_Value(\IMAGE_IMPORT_DESCRIPTORList()\OriginalFirstThunk,#PB_Long))
  788.               AddList(gilist(),"TimeDateStamp" + Chr(10) + Pex_Hex_Value(\IMAGE_IMPORT_DESCRIPTORList()\TimeDateStamp,#PB_Long)+ Chr(10) + "Date : " + Pex_Date_Format(\IMAGE_IMPORT_DESCRIPTORList()\TimeDateStamp))
  789.               AddList(gilist(),"ForwarderChain" + Chr(10) + Pex_Hex_Value(\IMAGE_IMPORT_DESCRIPTORList()\ForwarderChain,#PB_Long))
  790.               AddList(gilist(),"Name" + Chr(10) + Pex_Hex_Value(\IMAGE_IMPORT_DESCRIPTORList()\Name,#PB_Long))
  791.               AddList(gilist(),"FirstThunk" + Chr(10) + Pex_Hex_Value(\IMAGE_IMPORT_DESCRIPTORList()\FirstThunk,#PB_Long))
  792.               Break
  793.             EndIf
  794.           Next
  795.         EndWith      
  796.       Else
  797.         Protected FuncCount.l
  798.         With CurrentPB_PEExplorerFile\IMAGE_IMPORT_DESCRIPTORInfo
  799.           ForEach \IMAGE_IMPORT_DESCRIPTORList()
  800.             FuncCount+ListSize(\IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe())
  801.           Next
  802.         EndWith
  803.         AddList(gilist(),"Function Count" + Chr(10) + Str(FuncCount))          
  804.       EndIf
  805.     Case #DESCRIPTOR_EXPORT
  806.       If SelectType <> ""
  807.         With CurrentPB_PEExplorerFile\IMAGE_EXPORT_DIRECTORYInfo
  808.           ForEach \ExportFunctionNameListe()
  809.             If \ExportFunctionNameListe()\FunctionName = SelectType
  810.               AddList(gilist(),"Address" + Chr(10) + Pex_Hex_Value(\ExportFunctionNameListe()\FunctionAddress,#PB_Long))
  811.               AddList(gilist(),"Ordinale" + Chr(10) + Pex_Hex_Value(\ExportFunctionNameListe()\Ordinale,#PB_Word))
  812.               Break
  813.             EndIf
  814.           Next
  815.         EndWith
  816.       Else
  817.         With CurrentPB_PEExplorerFile\IMAGE_EXPORT_DIRECTORYInfo
  818.           AddList(gilist(),"Characteristics" + Chr(10) + Pex_Hex_Value(\Characteristics,#PB_Long))
  819.           AddList(gilist(),"TimeDateStamp" + Chr(10) + Pex_Hex_Value(\TimeDateStamp,#PB_Long)+ Chr(10) + "Date : " + Pex_Date_Format(\TimeDateStamp))
  820.           AddList(gilist(),"MajorVersion" + Chr(10) + Pex_Hex_Value(\MajorVersion,#PB_Word)+ Chr(10) + Str(\MajorVersion) + "." + Str(\MinorVersion))
  821.           AddList(gilist(),"MinorVersion" + Chr(10) + Pex_Hex_Value(\MinorVersion,#PB_Word))
  822.           AddList(gilist(),"Name" + Chr(10) + Pex_Hex_Value(\Name,#PB_Long)+ Chr(10) + \__File_OriginalDllName)
  823.           AddList(gilist(),"Base" + Chr(10) + Pex_Hex_Value(\Base,#PB_Long))
  824.           AddList(gilist(),"NumberOfFunctions" + Chr(10) + Pex_Hex_Value(\NumberOfFunctions,#PB_Long))
  825.           AddList(gilist(),"NumberOfNames" + Chr(10) + Pex_Hex_Value(\NumberOfNames,#PB_Long))
  826.           AddList(gilist(),"AddressOfFunctions" + Chr(10) + Pex_Hex_Value(\AddressOfFunctions,#PB_Long))
  827.           AddList(gilist(),"AddressOfNames" + Chr(10) + Pex_Hex_Value(\AddressOfNames,#PB_Long))
  828.           AddList(gilist(),"AddressOfNameOrdinals" + Chr(10) + Pex_Hex_Value(\AddressOfNameOrdinals,#PB_Long))
  829.         EndWith
  830.       EndIf
  831.     Case #ENDOFDATA
  832.       With CurrentPB_PEExplorerFile
  833.         AddList(gilist(),"Size" + Chr(10) + Str(FileSize(CurrentFileLoc)-\__File_ImageSize) + " Byte")
  834.         AddList(gilist(),"File Offset" + Chr(10) + Pex_Hex_Value(\__File_ImageSize,#PB_Long))
  835.         AddList(gilist(),"Frist 30 Byte Of Data" + Chr(10) + Pex_HexRawData_Read(\__File_ImageSize,FileSize(CurrentFileLoc)-\__File_ImageSize,30,1) + Chr(10) + ReplaceString(Pex_HexRawData_Read(\__File_ImageSize,FileSize(CurrentFileLoc)-\__File_ImageSize,30,0),Chr(10),""))
  836.       EndWith
  837.     Case #DESCRIPTOR_RESOURCE
  838.       Protected Cres$,ResnType$
  839.       If SelectType <> ""
  840.         If  ResFileType <> ""
  841.           With CurrentPB_PEExplorerFile\IMAGE_RESOURCE_DIRECTORYInfo
  842.             ForEach \ResourceDirectoryList()
  843.               If \ResourceDirectoryList()\__File_ResourceDirectoryName
  844.                 Cres$= \ResourceDirectoryList()\__File_ResourceDirectoryName
  845.                 ResnType$ = "String"
  846.               Else
  847.                 Cres$ = Pex_Resource_Type(\ResourceDirectoryList()\__File_ResourceDirectoryID)
  848.                 ResnType$ = "Integer"
  849.               EndIf
  850.               If   Cres$ = SelectType
  851.                 ForEach \ResourceDirectoryList()\ResourceSubDirectoryList()
  852.                   If \ResourceDirectoryList()\ResourceSubDirectoryList()\__File_ResourceDirectoryName
  853.                     Cres$= \ResourceDirectoryList()\ResourceSubDirectoryList()\__File_ResourceDirectoryName
  854.                     ResnType$ = "String"
  855.                   Else
  856.                     Cres$ = Str(\ResourceDirectoryList()\ResourceSubDirectoryList()\__File_ResourceDirectoryID)
  857.                     ResnType$ = "Integer"
  858.                   EndIf
  859.                   If   Cres$ = ResFileType
  860.                     AddList(gilist(),"Characteristics" + Chr(10) + Pex_Hex_Value(\ResourceDirectoryList()\ResourceSubDirectoryList()\Characteristics,#PB_Long)+ Chr(10) + "Entry Name Type : " + ResnType$);
  861.                     AddList(gilist(),"TimeDateStamp" + Chr(10) + Pex_Hex_Value(\ResourceDirectoryList()\ResourceSubDirectoryList()\TimeDateStamp,#PB_Long)+ Chr(10) + "Date : " + Pex_Date_Format(\ResourceDirectoryList()\ResourceSubDirectoryList()\TimeDateStamp))      
  862.                     AddList(gilist(),"MajorVersion" + Chr(10) + Pex_Hex_Value(\ResourceDirectoryList()\ResourceSubDirectoryList()\MajorVersion,#PB_Word)+ Chr(10) + Str(\ResourceDirectoryList()\ResourceSubDirectoryList()\MajorVersion) + "." + Str(\ResourceDirectoryList()\ResourceSubDirectoryList()\MinorVersion))  
  863.                     AddList(gilist(),"MinorVersion" + Chr(10) + Pex_Hex_Value(\ResourceDirectoryList()\ResourceSubDirectoryList()\MinorVersion,#PB_Word))        
  864.                     AddList(gilist(),"NumberOfNamedEntries" + Chr(10) + Pex_Hex_Value(\ResourceDirectoryList()\ResourceSubDirectoryList()\NumberOfNamedEntries,#PB_Word));
  865.                     AddList(gilist(),"NumberOfIdEntries" + Chr(10) + Pex_Hex_Value(\ResourceDirectoryList()\ResourceSubDirectoryList()\NumberOfIdEntries,#PB_Word))
  866.                     AddList(gilist(),"")            
  867.                     AddList(gilist(),"File Resource Offset" + Chr(10) + Pex_Hex_Value(\ResourceDirectoryList()\ResourceSubDirectoryList()\__File_ResourceOffset,#PB_Long))
  868.                     AddList(gilist(),"OffsetToData" + Chr(10) + Pex_Hex_Value(\ResourceDirectoryList()\ResourceSubDirectoryList()\OffsetToData,#PB_Long))
  869.                     AddList(gilist(),"Size" + Chr(10) + Str(\ResourceDirectoryList()\ResourceSubDirectoryList()\Size) + " Byte")
  870.                     AddList(gilist(),"CodePage" + Chr(10) + Pex_Hex_Value(\ResourceDirectoryList()\ResourceSubDirectoryList()\CodePage,#PB_Long))
  871.                     AddList(gilist(),"Frist 30 Byte Of resource" + Chr(10) + Pex_HexRawData_Read(\ResourceDirectoryList()\ResourceSubDirectoryList()\__File_ResourceOffset,\ResourceDirectoryList()\ResourceSubDirectoryList()\Size,30) + Chr(10) + ReplaceString(Pex_HexRawData_Read(\ResourceDirectoryList()\ResourceSubDirectoryList()\__File_ResourceOffset,\ResourceDirectoryList()\ResourceSubDirectoryList()\Size,30,0),Chr(10),""))
  872.                    
  873.                     Pex_Resource_Read(\ResourceDirectoryList()\__File_ResourceDirectoryID,\ResourceDirectoryList()\ResourceSubDirectoryList()\__File_ResourceDirectoryName,\ResourceDirectoryList()\ResourceSubDirectoryList()\__File_ResourceDirectoryID,\ResourceDirectoryList()\ResourceSubDirectoryList()\__File_ResourceOffset,\ResourceDirectoryList()\ResourceSubDirectoryList()\Size)
  874.                    
  875.                     Break
  876.                   EndIf
  877.                 Next
  878.                 Break
  879.               EndIf
  880.             Next
  881.           EndWith
  882.         Else
  883.           ForEach CurrentPB_PEExplorerFile\IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()
  884.             If CurrentPB_PEExplorerFile\IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()\__File_ResourceDirectoryName
  885.               Cres$= CurrentPB_PEExplorerFile\IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()\__File_ResourceDirectoryName
  886.               ResnType$ = "String"
  887.             Else
  888.               Cres$ = Pex_Resource_Type(CurrentPB_PEExplorerFile\IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()\__File_ResourceDirectoryID)
  889.               ResnType$ = "Integer"
  890.             EndIf
  891.             If   Cres$ = SelectType
  892.               With CurrentPB_PEExplorerFile\IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()
  893.                 AddList(gilist(),"Characteristics" + Chr(10) + Pex_Hex_Value(\Characteristics,#PB_Long)+ Chr(10) + "Entry Name Type : " + ResnType$);
  894.                 AddList(gilist(),"TimeDateStamp" + Chr(10) + Pex_Hex_Value(\TimeDateStamp,#PB_Long)+ Chr(10) + "Date : " + Pex_Date_Format(\TimeDateStamp))      
  895.                 AddList(gilist(),"MajorVersion" + Chr(10) + Pex_Hex_Value(\MajorVersion,#PB_Word)+ Chr(10) + Str(\MajorVersion) + "." + Str(\MinorVersion))  
  896.                 AddList(gilist(),"MinorVersion" + Chr(10) + Pex_Hex_Value(\MinorVersion,#PB_Word))        
  897.                 AddList(gilist(),"NumberOfNamedEntries" + Chr(10) + Pex_Hex_Value(\NumberOfNamedEntries,#PB_Word));
  898.                 AddList(gilist(),"NumberOfIdEntries" + Chr(10) + Pex_Hex_Value(\NumberOfIdEntries,#PB_Word))
  899.               EndWith
  900.               Break
  901.             EndIf
  902.           Next
  903.         EndIf
  904.       Else
  905.         With CurrentPB_PEExplorerFile\IMAGE_RESOURCE_DIRECTORYInfo
  906.           AddList(gilist(),"Characteristics" + Chr(10) + Pex_Hex_Value(\Characteristics,#PB_Long));
  907.           AddList(gilist(),"TimeDateStamp" + Chr(10) + Pex_Hex_Value(\TimeDateStamp,#PB_Long)+ Chr(10) + "Date : " + Pex_Date_Format(\TimeDateStamp))      
  908.           AddList(gilist(),"MajorVersion" + Chr(10) + Pex_Hex_Value(\MajorVersion,#PB_Word)+ Chr(10) + Str(\MajorVersion) + "." + Str(\MinorVersion))  
  909.           AddList(gilist(),"MinorVersion" + Chr(10) + Pex_Hex_Value(\MinorVersion,#PB_Word))        
  910.           AddList(gilist(),"NumberOfNamedEntries" + Chr(10) + Pex_Hex_Value(\NumberOfNamedEntries,#PB_Word));
  911.           AddList(gilist(),"NumberOfIdEntries" + Chr(10) + Pex_Hex_Value(\NumberOfIdEntries,#PB_Word))
  912.         EndWith
  913.       EndIf
  914.   EndSelect
  915.   ForEach gilist()
  916.     AddGadgetItem(#Gadget_ListIcon_PeExplorer,-1,gilist())
  917.   Next
  918. EndProcedure
  919.  
  920. Procedure PeGetInfo_PeExplorer()
  921.   Protected Sttree = GetGadgetState(#Gadget_Tree_PeExplorer)
  922.   If Sttree = -1 :ProcedureReturn:EndIf
  923.   Protected gettreeTxt$ = GetGadgetItemText(#Gadget_Tree_PeExplorer,Sttree)
  924.   Protected t.l,Selectednode$,PerSdir$
  925.   ClearGadgetItems(#Gadget_ListIcon_PeExplorer)
  926.   Select gettreeTxt$
  927.     Case #ENDOFDATA
  928.       SetInfoHeader_PeExplorer(#ENDOFDATA)
  929.     Case #File_Info
  930.       SetInfoHeader_PeExplorer(#File_Info)
  931.     Case #FILE_HEADER, #OPTIONAL_HEADER
  932.       SetInfoHeader_PeExplorer(gettreeTxt$)
  933.     Default
  934.       For t=Sttree To 0 Step -1
  935.         If GetGadgetItemAttribute(#Gadget_Tree_PeExplorer, t, #PB_Tree_SubLevel) = 2
  936.           If PerSdir$ =""
  937.             PerSdir$=  GetGadgetItemText(#Gadget_Tree_PeExplorer,t)
  938.           EndIf
  939.         EndIf
  940.         If GetGadgetItemAttribute(#Gadget_Tree_PeExplorer, t, #PB_Tree_SubLevel) = 1
  941.           Selectednode$=  GetGadgetItemText(#Gadget_Tree_PeExplorer,t)
  942.           Break
  943.         EndIf
  944.       Next
  945.       Select Selectednode$
  946.         Case #DESCRIPTOR_RESOURCE
  947.           If gettreeTxt$ = #DESCRIPTOR_RESOURCE
  948.             SetInfoHeader_PeExplorer(#DESCRIPTOR_RESOURCE)
  949.           Else  
  950.             If GetGadgetItemAttribute(#Gadget_Tree_PeExplorer, Sttree, #PB_Tree_SubLevel) = 2
  951.               SetInfoHeader_PeExplorer(#DESCRIPTOR_RESOURCE,gettreeTxt$)
  952.             Else
  953.               SetInfoHeader_PeExplorer(#DESCRIPTOR_RESOURCE, PerSdir$,gettreeTxt$)
  954.             EndIf
  955.           EndIf
  956.         Case #DESCRIPTOR_EXPORT
  957.           If gettreeTxt$ = #DESCRIPTOR_EXPORT
  958.             SetInfoHeader_PeExplorer(#DESCRIPTOR_EXPORT)
  959.           Else
  960.             SetInfoHeader_PeExplorer(#DESCRIPTOR_EXPORT,gettreeTxt$)
  961.           EndIf
  962.         Case #DESCRIPTOR_IMPORT
  963.           If gettreeTxt$ = #DESCRIPTOR_IMPORT
  964.             SetInfoHeader_PeExplorer(#DESCRIPTOR_IMPORT)
  965.           ElseIf GetGadgetItemAttribute(#Gadget_Tree_PeExplorer, Sttree, #PB_Tree_SubLevel) = 2
  966.             SetInfoHeader_PeExplorer(#DESCRIPTOR_IMPORT,GetFilePart(gettreeTxt$))
  967.           Else
  968.             SetInfoHeader_PeExplorer(#DESCRIPTOR_IMPORT,GetFilePart(PerSdir$),gettreeTxt$)
  969.           EndIf
  970.          
  971.         Case #DESCRIPTOR_RELOCATION
  972.           If gettreeTxt$ = #DESCRIPTOR_RELOCATION
  973.             SetInfoHeader_PeExplorer(#DESCRIPTOR_RELOCATION)
  974.           ElseIf GetGadgetItemAttribute(#Gadget_Tree_PeExplorer, Sttree, #PB_Tree_SubLevel) = 2
  975.             SetInfoHeader_PeExplorer(#DESCRIPTOR_RELOCATION,GetFilePart(gettreeTxt$))
  976.           Else
  977.             SetInfoHeader_PeExplorer(#DESCRIPTOR_RELOCATION,GetFilePart(PerSdir$),gettreeTxt$)
  978.           EndIf
  979.          
  980.         Default
  981.           SetInfoHeader_PeExplorer(Selectednode$,gettreeTxt$)
  982.       EndSelect
  983.   EndSelect
  984. EndProcedure
  985.  
  986. Procedure PeSetInfo_PeExplorer(FilePath.s)
  987.   Protected tPB_PEExplorerFile.PB_PEExplorer
  988.   Protected RdExe = ReadFile(#PB_Any, FilePath); open pe file to read
  989.   If Not RdExe:MessageRequester("","Unable to open file!"):ProcedureReturn 0:EndIf
  990.   If Pb_PEExplorer(RdExe ,@tPB_PEExplorerFile) = 0:CloseFile(RdExe):ProcedureReturn:EndIf
  991.   StatusBarProgress(#StatusBar_PeExplorer, #StatusBarItem_PeProgress, 40)
  992.   CloseFile(RdExe)
  993.   ClearStructure(@CurrentPB_PEExplorerFile,PB_PEExplorer)
  994.   CurrentPB_PEExplorerFile=tPB_PEExplorerFile
  995.   CurrentFileLoc = FilePath
  996.   ClearGadgetItems(#Gadget_Tree_PeExplorer)
  997.   ClearGadgetItems(#Gadget_ListIcon_PeExplorer)
  998.   With CurrentPB_PEExplorerFile
  999.     AddGadgetItem(#Gadget_Tree_PeExplorer,-1,#File_Info)
  1000.     AddGadgetItem(#Gadget_Tree_PeExplorer,-1,#DOS_HEADER,0,1)
  1001.     SetGadgetItemState(#Gadget_Tree_PeExplorer, 0, #PB_Tree_Expanded)
  1002.     AddGadgetItem(#Gadget_Tree_PeExplorer,-1,#IMAGE_NT_HEADERS,0,1)
  1003.     AddGadgetItem(#Gadget_Tree_PeExplorer,-1,#FILE_HEADER,0,2)
  1004.     AddGadgetItem(#Gadget_Tree_PeExplorer,-1,#OPTIONAL_HEADER,0,2)
  1005.     SetGadgetItemState(#Gadget_Tree_PeExplorer, 2, #PB_Tree_Expanded)
  1006.     AddGadgetItem(#Gadget_Tree_PeExplorer,-1,#SECTION_HEADER,0,1)
  1007.     ForEach \IMAGE_SECTION_HEADERList()
  1008.       AddGadgetItem(#Gadget_Tree_PeExplorer,-1,(\IMAGE_SECTION_HEADERList()\__File_Selction_Name),0,2)
  1009.     Next
  1010.     StatusBarProgress(#StatusBar_PeExplorer, #StatusBarItem_PeProgress, 60)
  1011.     If ListSize(\IMAGE_IMPORT_DESCRIPTORInfo\IMAGE_IMPORT_DESCRIPTORList()) >0
  1012.       AddGadgetItem(#Gadget_Tree_PeExplorer,-1,#DESCRIPTOR_IMPORT,0,1)
  1013.       ForEach \IMAGE_IMPORT_DESCRIPTORInfo\IMAGE_IMPORT_DESCRIPTORList()
  1014.         ;         AddGadgetItem(#Gadget_Tree_PeExplorer,-1,(\IMAGE_IMPORT_DESCRIPTORInfo\IMAGE_IMPORT_DESCRIPTORList()\LibraryName),0,2)
  1015.         AddGadgetItem(#Gadget_Tree_PeExplorer,-1,Pex_DLL_FindPath(\IMAGE_IMPORT_DESCRIPTORInfo\IMAGE_IMPORT_DESCRIPTORList()\LibraryName),0,2)
  1016.         ForEach \IMAGE_IMPORT_DESCRIPTORInfo\IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()
  1017.           If \IMAGE_IMPORT_DESCRIPTORInfo\IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()\Ordinal
  1018.             If Pex_Is64Bit()
  1019.               AddGadgetItem(#Gadget_Tree_PeExplorer,-1,Pex_Hex_Value(\IMAGE_IMPORT_DESCRIPTORInfo\IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()\Ordinal&$ffffff,#PB_Quad),0,3)
  1020.             Else
  1021.               AddGadgetItem(#Gadget_Tree_PeExplorer,-1,Pex_Hex_Value(\IMAGE_IMPORT_DESCRIPTORInfo\IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()\Ordinal&$ffffff,#PB_Long),0,3)                      
  1022.             EndIf
  1023.           Else
  1024.             AddGadgetItem(#Gadget_Tree_PeExplorer,-1,\IMAGE_IMPORT_DESCRIPTORInfo\IMAGE_IMPORT_DESCRIPTORList()\ImportFunctionListe()\FunctionName,0,3)                      
  1025.           EndIf
  1026.         Next
  1027.       Next
  1028.     EndIf
  1029.     StatusBarProgress(#StatusBar_PeExplorer, #StatusBarItem_PeProgress, 70)
  1030.         If ListSize(\IMAGE_BASE_RELOCATIONList()) >0
  1031.       AddGadgetItem(#Gadget_Tree_PeExplorer,-1,#DESCRIPTOR_RELOCATION,0,1)
  1032.       ForEach \IMAGE_BASE_RELOCATIONList()
  1033.         AddGadgetItem(#Gadget_Tree_PeExplorer,-1,Pex_Hex_Value(\IMAGE_BASE_RELOCATIONList()\VirtualAddress,#PB_Long),0,2)
  1034.         ForEach \IMAGE_BASE_RELOCATIONList()\RelocationTypeList()
  1035.           AddGadgetItem(#Gadget_Tree_PeExplorer,-1,Pex_Hex_Value(\IMAGE_BASE_RELOCATIONList()\RelocationTypeList()\u,#PB_Word),0,3)
  1036.         Next
  1037.       Next
  1038.     EndIf
  1039.     If ListSize(\IMAGE_EXPORT_DIRECTORYInfo\ExportFunctionNameListe()) >0
  1040.       AddGadgetItem(#Gadget_Tree_PeExplorer,-1,#DESCRIPTOR_EXPORT,0,1)
  1041.       ForEach \IMAGE_EXPORT_DIRECTORYInfo\ExportFunctionNameListe()
  1042.         AddGadgetItem(#Gadget_Tree_PeExplorer,-1,(\IMAGE_EXPORT_DIRECTORYInfo\ExportFunctionNameListe()\FunctionName),0,2)
  1043.       Next
  1044.     EndIf
  1045.     StatusBarProgress(#StatusBar_PeExplorer, #StatusBarItem_PeProgress, 80)
  1046.     If ListSize(\IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()) >0
  1047.       AddGadgetItem(#Gadget_Tree_PeExplorer,-1,#DESCRIPTOR_RESOURCE,0,1)
  1048.       ForEach \IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()
  1049.         If \IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()\__File_ResourceDirectoryName
  1050.           AddGadgetItem(#Gadget_Tree_PeExplorer,-1,(\IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()\__File_ResourceDirectoryName),0,2)
  1051.         Else
  1052.           AddGadgetItem(#Gadget_Tree_PeExplorer,-1,Pex_Resource_Type(\IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()\__File_ResourceDirectoryID),0,2)
  1053.         EndIf
  1054.         ForEach \IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()\ResourceSubDirectoryList()
  1055.           If \IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()\ResourceSubDirectoryList()\__File_ResourceDirectoryName
  1056.             AddGadgetItem(#Gadget_Tree_PeExplorer,-1,(\IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()\ResourceSubDirectoryList()\__File_ResourceDirectoryName),0,3)
  1057.           Else
  1058.             AddGadgetItem(#Gadget_Tree_PeExplorer,-1,Str(\IMAGE_RESOURCE_DIRECTORYInfo\ResourceDirectoryList()\ResourceSubDirectoryList()\__File_ResourceDirectoryID),0,3)
  1059.           EndIf
  1060.         Next
  1061.       Next
  1062.     EndIf
  1063.     StatusBarProgress(#StatusBar_PeExplorer, #StatusBarItem_PeProgress, 90)
  1064.      
  1065.     If \__File_ImageSize <> FileSize(CurrentFileLoc)
  1066.       AddGadgetItem(#Gadget_Tree_PeExplorer,-1,#ENDOFDATA,0,1)
  1067.     EndIf
  1068.   EndWith
  1069.   StatusBarProgress(#StatusBar_PeExplorer, #StatusBarItem_PeProgress, 100)
  1070.  
  1071.   SetInfoHeader_PeExplorer(#File_Info)
  1072.  
  1073.   If Pex_UpxPacker_Detect()
  1074.     If Pex_UpxPacker_UnPacked() = 1
  1075.       PeSetInfo_PeExplorer(FilePath)
  1076.     EndIf
  1077.   EndIf
  1078. EndProcedure
  1079.  
  1080. Procedure SelectaFile_PeExplorer()
  1081.   Protected FilePath.s=OpenFileRequester("Slect a file...","","Exe or Dll|*.dll;*.exe",0)
  1082.   If FilePath="":ProcedureReturn:EndIf
  1083.   PeSetInfo_PeExplorer(FilePath)
  1084. EndProcedure
  1085.  
  1086. Procedure DropFileWindow_PeExplorer()
  1087.   PeSetInfo_PeExplorer(EventDropFiles())
  1088. EndProcedure
  1089.  
  1090. Procedure OpenWindow_PeExplorer()
  1091.   OpenWindow(#Window_PeExplorer, 0, 0, 820, 465, "PeExplorer v 1.0", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
  1092.   CreateStatusBar(  #StatusBar_PeExplorer, WindowID(#Window_PeExplorer))
  1093.   AddStatusBarField(#PB_Ignore)
  1094.   StatusBarText(  #StatusBar_PeExplorer, #StatusBarItem_PeInfo, "Hi " + UserName())
  1095.   AddStatusBarField(50)
  1096.   StatusBarProgress(#StatusBar_PeExplorer, #StatusBarItem_PeProgress, 0)
  1097.   CreateMenu(#Menu_Window_PeExplorer, WindowID(#Window_PeExplorer))
  1098.   MenuTitle("File")
  1099.   MenuItem(#MenuItem_SelectFile, "Select a file")
  1100.   MenuTitle("Plugin")
  1101.   MenuTitle("About")
  1102.   TreeGadget(#Gadget_Tree_PeExplorer, 5, 5, 205, 410)
  1103.   ListIconGadget(#Gadget_ListIcon_PeExplorer, 215, 5, 600, 410, "Member", 200)
  1104.   AddGadgetColumn(#Gadget_ListIcon_PeExplorer,1,"Value",200)
  1105.   AddGadgetColumn(#Gadget_ListIcon_PeExplorer,2,"Comment",200)
  1106.   SplitterGadget(#Gadget_Splitter_PeExplorer,5,5,600+205+5,410,#Gadget_Tree_PeExplorer,#Gadget_ListIcon_PeExplorer,#PB_Splitter_Vertical)
  1107.   EnableWindowDrop(#Window_PeExplorer, #PB_Drop_Files, #PB_Drag_Copy)
  1108.   BindEvent(#PB_Event_WindowDrop , @DropFileWindow_PeExplorer())
  1109.   BindEvent(#PB_Event_SizeWindow , @ResizeGadgetsWindow_PeExplorer())
  1110.   BindEvent(#PB_Event_CloseWindow   , @CloseWindow_PeExplorer())
  1111.   BindMenuEvent(#Menu_Window_PeExplorer,#MenuItem_SelectFile,@SelectaFile_PeExplorer())
  1112.   BindGadgetEvent(#Gadget_Tree_PeExplorer,@PeGetInfo_PeExplorer(),#PB_EventType_LeftClick )
  1113.   SetGadgetState(#Gadget_Splitter_PeExplorer, 300)
  1114. EndProcedure
  1115.  
  1116. OpenWindow_PeExplorer()
  1117. LoadPlugins_PeExplorer()
  1118.  
  1119. Repeat : WaitWindowEvent() :ForEver
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement