Initial commit
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
*.cfg
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<project xmlns="http://www.purebasic.com/namespace" version="1.0" creator="PureBasic 6.20 (Windows - x64)">
|
||||||
|
<section name="config">
|
||||||
|
<options closefiles="1" openmode="0" name="PB-DllWrapperMaker"/>
|
||||||
|
</section>
|
||||||
|
<section name="data">
|
||||||
|
<explorer view="C:\ProgramData\PureBasic\Examples\" pattern="0"/>
|
||||||
|
<log show="1"/>
|
||||||
|
<lastopen date="2025-08-03 16:40" user="Herwin" host="DESKTOP-FND9TQS"/>
|
||||||
|
</section>
|
||||||
|
<section name="files"/>
|
||||||
|
<section name="targets">
|
||||||
|
<target name="Default Target" enabled="1" default="1">
|
||||||
|
<inputfile value=""/>
|
||||||
|
<outputfile value=""/>
|
||||||
|
<options xpskin="1" dpiaware="1" debug="1" optimizer="0"/>
|
||||||
|
</target>
|
||||||
|
</section>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,174 @@
|
|||||||
|
;{- Code Header
|
||||||
|
; ==- Basic Info -================================
|
||||||
|
; Name: ImageNtHeaderHelper.pbi
|
||||||
|
; Version: 0.0.1
|
||||||
|
; Author: Herwin Bozet (NibblePoker)
|
||||||
|
;
|
||||||
|
; ==- Compatibility -=============================
|
||||||
|
; Compiler version:
|
||||||
|
; * PureBasic 6.0 LTS
|
||||||
|
; * PureBasic 6.0 LTS - C Backend
|
||||||
|
;
|
||||||
|
; ==- Links & License -===========================
|
||||||
|
; License: Unlicense
|
||||||
|
; GitHub: ???
|
||||||
|
;}
|
||||||
|
|
||||||
|
|
||||||
|
;- Module declaration
|
||||||
|
DeclareModule ImageNtHeaderHelper
|
||||||
|
|
||||||
|
Enumeration INHH_ErrorCodes
|
||||||
|
#INHH_ERROR_None = 0
|
||||||
|
#INHH_ERROR_IdAlreadyUsed
|
||||||
|
#INHH_ERROR_IdNotfound
|
||||||
|
#INHH_ERROR_CannotOpenFile
|
||||||
|
#INHH_ERROR_CannotCreateFileMapping
|
||||||
|
#INHH_ERROR_CannotMapViewOfFile
|
||||||
|
#INHH_ERROR_CannotRetrieveHeaders
|
||||||
|
EndEnumeration
|
||||||
|
|
||||||
|
; Loads the given file into memory, maps a view of it into memory and attempts to retrieve the IMAGE_NT_HEADERS32 structure.
|
||||||
|
Declare.i GetImageNtHeader32(ImageNtHeaderId.i, FilePath$)
|
||||||
|
|
||||||
|
;
|
||||||
|
Declare.i FreeImageNtHeader32(ImageNtHeaderId.i)
|
||||||
|
|
||||||
|
;
|
||||||
|
Declare.i GetLastError()
|
||||||
|
Declare ClearLastError()
|
||||||
|
EndDeclareModule
|
||||||
|
|
||||||
|
|
||||||
|
;- Module definition
|
||||||
|
Module ImageNtHeaderHelper
|
||||||
|
EnableExplicit
|
||||||
|
|
||||||
|
CompilerIf Not Defined(SEC_IMAGE_NO_EXECUTE, #PB_Constant)
|
||||||
|
#SEC_IMAGE_NO_EXECUTE = $11000000
|
||||||
|
CompilerEndIf
|
||||||
|
|
||||||
|
Structure OpenImageNtHeader
|
||||||
|
FileId.i
|
||||||
|
*ViewAddress
|
||||||
|
*RetrievedNtHeaders
|
||||||
|
EndStructure
|
||||||
|
|
||||||
|
Global LastErrorCode.i = 0
|
||||||
|
|
||||||
|
Global NewMap OpenImageNtHeaders.OpenImageNtHeader()
|
||||||
|
|
||||||
|
|
||||||
|
Procedure.i GetImageNtHeader32(ImageNtHeaderId.i, FilePath$)
|
||||||
|
; Handling the ID and the map
|
||||||
|
Define ImageNtHeaderId$
|
||||||
|
|
||||||
|
If ImageNtHeaderId = #PB_Any
|
||||||
|
Repeat
|
||||||
|
RandomData(@ImageNtHeaderId, SizeOf(ImageNtHeaderId))
|
||||||
|
ImageNtHeaderId$ = Str(ImageNtHeaderId)
|
||||||
|
Until FindMapElement(OpenImageNtHeaders(), ImageNtHeaderId$) = #Null
|
||||||
|
Else
|
||||||
|
ImageNtHeaderId$ = Str(ImageNtHeaderId)
|
||||||
|
If FindMapElement(OpenImageNtHeaders(), ImageNtHeaderId$) <> #Null
|
||||||
|
Debug "The value used for 'ImageNtHeaderId' was already in use ! (" + ImageNtHeaderId$ + ")"
|
||||||
|
LastErrorCode = #INHH_ERROR_IdAlreadyUsed
|
||||||
|
ProcedureReturn #Null
|
||||||
|
EndIf
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
AddMapElement(OpenImageNtHeaders(), ImageNtHeaderId$)
|
||||||
|
|
||||||
|
; Opening the file
|
||||||
|
Define InputFileHandle = ReadFile(#PB_Any, FilePath$)
|
||||||
|
|
||||||
|
If InputFileHandle = 0
|
||||||
|
Debug "Unable to open input file !"
|
||||||
|
LastErrorCode = #INHH_ERROR_CannotOpenFile
|
||||||
|
Goto INHH_GetImageNtHeader32_BadEnding
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
OpenImageNtHeaders()\FileId = InputFileHandle
|
||||||
|
|
||||||
|
; Mapping the file into memory
|
||||||
|
Define InputFileMappingHandle = CreateFileMapping_(FileID(InputFileHandle), #Null, #PAGE_READONLY | #SEC_IMAGE_NO_EXECUTE, 0, 0, #Null)
|
||||||
|
|
||||||
|
If InputFileMappingHandle = #ERROR_ALREADY_EXISTS Or InputFileMappingHandle = 0
|
||||||
|
Debug "Unable to create a file mapping !"
|
||||||
|
LastErrorCode = #INHH_ERROR_CannotCreateFileMapping
|
||||||
|
Goto INHH_GetImageNtHeader32_CloseInputFileHandle
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
Define InputFileViewPtr.i = MapViewOfFile_(InputFileMappingHandle, #FILE_MAP_READ, 0, 0, 0)
|
||||||
|
If InputFileViewPtr = #Null
|
||||||
|
Debug "Unable to map the input file into memory !"
|
||||||
|
LastErrorCode = #INHH_ERROR_CannotMapViewOfFile
|
||||||
|
Goto INHH_GetImageNtHeader32_CloseInputFileHandle
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
OpenImageNtHeaders()\ViewAddress = InputFileViewPtr
|
||||||
|
|
||||||
|
; Retrieving the NT headers
|
||||||
|
Define *RetrievedNtHeaders.IMAGE_NT_HEADERS32 = ImageNtHeader_(InputFileViewPtr)
|
||||||
|
If *RetrievedNtHeaders = #Null
|
||||||
|
Debug "Unable to retrieve the NT headers !"
|
||||||
|
LastErrorCode = #INHH_ERROR_CannotRetrieveHeaders
|
||||||
|
Goto INHH_GetImageNtHeader32_UnmapFileView
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
OpenImageNtHeaders()\RetrievedNtHeaders = *RetrievedNtHeaders
|
||||||
|
|
||||||
|
ProcedureReturn *RetrievedNtHeaders
|
||||||
|
|
||||||
|
; Error cases
|
||||||
|
INHH_GetImageNtHeader32_UnmapFileView:
|
||||||
|
UnmapViewOfFile_(InputFileViewPtr)
|
||||||
|
|
||||||
|
INHH_GetImageNtHeader32_CloseInputFileHandle:
|
||||||
|
CloseFile(InputFileHandle)
|
||||||
|
|
||||||
|
INHH_GetImageNtHeader32_BadEnding:
|
||||||
|
DeleteMapElement(OpenImageNtHeaders(), ImageNtHeaderId$)
|
||||||
|
ProcedureReturn #Null
|
||||||
|
EndProcedure
|
||||||
|
|
||||||
|
|
||||||
|
Procedure.i FreeImageNtHeader32(ImageNtHeaderId.i)
|
||||||
|
Define ImageNtHeaderId$ = Str(ImageNtHeaderId)
|
||||||
|
|
||||||
|
Define *HeaderInternalData.OpenImageNtHeader = FindMapElement(OpenImageNtHeaders(), ImageNtHeaderId$)
|
||||||
|
If *HeaderInternalData = #Null
|
||||||
|
ProcedureReturn #INHH_ERROR_IdNotfound
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
UnmapViewOfFile_(*HeaderInternalData\ViewAddress)
|
||||||
|
CloseFile(*HeaderInternalData\FileId)
|
||||||
|
|
||||||
|
ProcedureReturn #Null
|
||||||
|
EndProcedure
|
||||||
|
|
||||||
|
|
||||||
|
Procedure.i GetLastError()
|
||||||
|
ProcedureReturn LastErrorCode
|
||||||
|
EndProcedure
|
||||||
|
|
||||||
|
|
||||||
|
Procedure ClearLastError()
|
||||||
|
LastErrorCode = 0
|
||||||
|
EndProcedure
|
||||||
|
EndModule
|
||||||
|
|
||||||
|
|
||||||
|
;- Tests
|
||||||
|
CompilerIf #PB_Compiler_IsMainFile
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CompilerEndIf
|
||||||
|
|
||||||
|
; IDE Options = PureBasic 6.21 (Windows - x64)
|
||||||
|
; CursorPosition = 120
|
||||||
|
; FirstLine = 102
|
||||||
|
; Folding = --
|
||||||
|
; EnableXP
|
||||||
|
; DPIAware
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
;{- Code Header
|
||||||
|
; ==- Basic Info -================================
|
||||||
|
; Name: WinApi_GetConsoleProcessList.pbi
|
||||||
|
; Version: 0.0.1
|
||||||
|
; Author: Herwin Bozet (NibblePoker)
|
||||||
|
;
|
||||||
|
; ==- Compatibility -=============================
|
||||||
|
; Compiler version:
|
||||||
|
; * PureBasic 6.0 LTS
|
||||||
|
; * PureBasic 6.0 LTS - C Backend
|
||||||
|
;
|
||||||
|
; ==- Links & License -===========================
|
||||||
|
; License: Unlicense
|
||||||
|
; GitHub: ???
|
||||||
|
;}
|
||||||
|
|
||||||
|
EnableExplicit
|
||||||
|
|
||||||
|
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
|
||||||
|
#WinApi_GetConsoleProcessList_LibPath$ = "../Libs/X86/kernel32.lib"
|
||||||
|
CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64
|
||||||
|
#WinApi_GetConsoleProcessList_LibPath$ = "../Libs/X64/kernel32.lib"
|
||||||
|
CompilerElse
|
||||||
|
CompilerError "Please use x64 or x86 compilers for this include !"
|
||||||
|
CompilerEndIf
|
||||||
|
|
||||||
|
Import #WinApi_GetConsoleProcessList_LibPath$
|
||||||
|
GetConsoleProcessList_.l(*lpdwProcessList, dwProcessCount.l) As "GetConsoleProcessList"
|
||||||
|
EndImport
|
||||||
|
|
||||||
|
; IDE Options = PureBasic 6.21 (Windows - x64)
|
||||||
|
; CursorPosition = 27
|
||||||
|
; Folding = -
|
||||||
|
; EnableXP
|
||||||
|
; DPIAware
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
This is free and unencumbered software released into the public domain.
|
||||||
|
|
||||||
|
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||||
|
distribute this software, either in source code form or as a compiled
|
||||||
|
binary, for any purpose, commercial or non-commercial, and by any
|
||||||
|
means.
|
||||||
|
|
||||||
|
In jurisdictions that recognize copyright laws, the author or authors
|
||||||
|
of this software dedicate any and all copyright interest in the
|
||||||
|
software to the public domain. We make this dedication for the benefit
|
||||||
|
of the public at large and to the detriment of our heirs and
|
||||||
|
successors. We intend this dedication to be an overt act of
|
||||||
|
relinquishment in perpetuity of all present and future rights to this
|
||||||
|
software under copyright law.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
For more information, please refer to <http://unlicense.org/>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
:: These variables should point to '.exe' files.
|
||||||
|
set MSVC_DUMPBIN="C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\Hostx64\x64\dumpbin.exe"
|
||||||
|
set MSVC_LIB="C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\Hostx64\x64\lib.exe"
|
||||||
|
|
||||||
|
exit /b
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
@echo off
|
||||||
|
setlocal
|
||||||
|
|
||||||
|
pushd %CD%
|
||||||
|
cd /D "%~dp0"
|
||||||
|
|
||||||
|
call "%~dp0\0_config.cmd"
|
||||||
|
|
||||||
|
echo Checking the PATH
|
||||||
|
IF NOT EXIST %MSVC_LIB% (
|
||||||
|
echo ^> Unable to find 'lib.exe' as indicated in '%%MSVC_DUMPBIN%%' !
|
||||||
|
echo ^> Please check the '0_config.cmd' script !
|
||||||
|
goto end
|
||||||
|
)
|
||||||
|
echo ^> Found 'lib.exe' at the given location !
|
||||||
|
|
||||||
|
echo Removing old '.lib' files
|
||||||
|
del /S /Q .\*.lib 2> nul
|
||||||
|
|
||||||
|
echo Iterating over all '.def' files in 'libs/' for 'x64', 'x86' and 'arm64'...
|
||||||
|
for /R ".\" %%i in (*.def) do call :sub-make-lib X64 %%i
|
||||||
|
for /R ".\" %%i in (*.def) do call :sub-make-lib X86 %%i
|
||||||
|
for /R ".\" %%i in (*.def) do call :sub-make-lib ARM64 %%i
|
||||||
|
echo Done !
|
||||||
|
|
||||||
|
:end
|
||||||
|
popd
|
||||||
|
endlocal
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
|
||||||
|
|
||||||
|
:sub-make-lib
|
||||||
|
echo ^> %2
|
||||||
|
pushd %~dp2
|
||||||
|
::set _RAW_DEF_NAME=%~nx2
|
||||||
|
::set _RAW_DEF_NAME=%_RAW_DEF_NAME:.raw.def=%
|
||||||
|
::echo lib.exe /nologo /def:%_RAW_DEF_NAME%.raw.def /out:%_RAW_DEF_NAME%.lib /machine:%1
|
||||||
|
::%MSVC_LIB% /nologo /def:%_RAW_DEF_NAME%.raw.def /out:%_RAW_DEF_NAME%.lib /machine:%1
|
||||||
|
mkdir .\%1
|
||||||
|
%MSVC_LIB% /nologo /def:%~nx2 /out:.\%1\%~n2.lib /machine:%1
|
||||||
|
popd
|
||||||
|
exit /b
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,4 @@
|
|||||||
|
LIBRARY msvcrt.dll
|
||||||
|
|
||||||
|
EXPORTS
|
||||||
|
GetConsoleProcessList
|
||||||
+385
@@ -0,0 +1,385 @@
|
|||||||
|
;{- Code Header
|
||||||
|
; ==- Basic Info -================================
|
||||||
|
; Name: Main_PEArch.pb
|
||||||
|
; Version: 0.0.1
|
||||||
|
; Author: Herwin Bozet (NibblePoker)
|
||||||
|
;
|
||||||
|
; ==- Compatibility -=============================
|
||||||
|
; Compiler version:
|
||||||
|
; * PureBasic 6.0 LTS
|
||||||
|
; * PureBasic 6.0 LTS - C Backend
|
||||||
|
;
|
||||||
|
; ==- Links & License -===========================
|
||||||
|
; License: Unlicense
|
||||||
|
; GitHub: ???
|
||||||
|
;}
|
||||||
|
|
||||||
|
;- Compiler directive
|
||||||
|
EnableExplicit
|
||||||
|
|
||||||
|
XIncludeFile "./Includes/ImageNtHeaderHelper.pbi"
|
||||||
|
XIncludeFile "./Includes/WinApi_GetConsoleProcessList.pbi"
|
||||||
|
|
||||||
|
|
||||||
|
;- Constants
|
||||||
|
#IMAGE_FILE_MACHINE_UNKNOWN = $0
|
||||||
|
#IMAGE_FILE_MACHINE_ALPHA = $184
|
||||||
|
#IMAGE_FILE_MACHINE_ALPHA64 = $284
|
||||||
|
#IMAGE_FILE_MACHINE_AM33 = $1d3
|
||||||
|
#IMAGE_FILE_MACHINE_AMD64 = $8664
|
||||||
|
#IMAGE_FILE_MACHINE_ARM = $1c0
|
||||||
|
#IMAGE_FILE_MACHINE_ARM64 = $aa64
|
||||||
|
#IMAGE_FILE_MACHINE_ARM64EC = $A641
|
||||||
|
#IMAGE_FILE_MACHINE_ARM64X = $A64E
|
||||||
|
#IMAGE_FILE_MACHINE_ARMNT = $1c4
|
||||||
|
#IMAGE_FILE_MACHINE_AXP64 = $284
|
||||||
|
#IMAGE_FILE_MACHINE_EBC = $ebc
|
||||||
|
#IMAGE_FILE_MACHINE_I386 = $14c
|
||||||
|
#IMAGE_FILE_MACHINE_IA64 = $200
|
||||||
|
#IMAGE_FILE_MACHINE_LOONGARCH32 = $6232
|
||||||
|
#IMAGE_FILE_MACHINE_LOONGARCH64 = $6264
|
||||||
|
#IMAGE_FILE_MACHINE_M32R = $9041
|
||||||
|
#IMAGE_FILE_MACHINE_MIPS16 = $266
|
||||||
|
#IMAGE_FILE_MACHINE_MIPSFPU = $366
|
||||||
|
#IMAGE_FILE_MACHINE_MIPSFPU16 = $466
|
||||||
|
#IMAGE_FILE_MACHINE_POWERPC = $1f0
|
||||||
|
#IMAGE_FILE_MACHINE_POWERPCFP = $1f1
|
||||||
|
#IMAGE_FILE_MACHINE_R3000BE = $160
|
||||||
|
#IMAGE_FILE_MACHINE_R3000 = $162
|
||||||
|
#IMAGE_FILE_MACHINE_R4000 = $166
|
||||||
|
#IMAGE_FILE_MACHINE_R10000 = $168
|
||||||
|
#IMAGE_FILE_MACHINE_RISCV32 = $5032
|
||||||
|
#IMAGE_FILE_MACHINE_RISCV64 = $5064
|
||||||
|
#IMAGE_FILE_MACHINE_RISCV128 = $5128
|
||||||
|
#IMAGE_FILE_MACHINE_SH3 = $1a2
|
||||||
|
#IMAGE_FILE_MACHINE_SH3DSP = $1a3
|
||||||
|
#IMAGE_FILE_MACHINE_SH4 = $1a6
|
||||||
|
#IMAGE_FILE_MACHINE_SH5 = $1a8
|
||||||
|
#IMAGE_FILE_MACHINE_THUMB = $1c2
|
||||||
|
#IMAGE_FILE_MACHINE_WCEMIPSV2 = $169
|
||||||
|
|
||||||
|
|
||||||
|
;- Enumerations
|
||||||
|
Enumeration PEARCH_ErrorCodes
|
||||||
|
#PEARCH_ERROR_None = 0
|
||||||
|
|
||||||
|
#PEARCH_ERROR_ConsoleError = 1
|
||||||
|
#PEARCH_ERROR_UnknownError = 2
|
||||||
|
|
||||||
|
;#PEARCH_ERROR_INHH_ERROR_IdAlreadyUsed = 10
|
||||||
|
;#PEARCH_ERROR_INHH_ERROR_IdNotfound = 11
|
||||||
|
#PEARCH_ERROR_INHH_ERROR_CannotOpenFile = 12
|
||||||
|
#PEARCH_ERROR_INHH_ERROR_CannotCreateFileMapping = 13
|
||||||
|
#PEARCH_ERROR_INHH_ERROR_CannotMapViewOfFile = 14
|
||||||
|
#PEARCH_ERROR_INHH_ERROR_CannotRetrieveHeaders = 15
|
||||||
|
|
||||||
|
#PEARCH_ERROR_UnknownArgument = 20
|
||||||
|
#PEARCH_ERROR_MissingFileArgument = 21
|
||||||
|
#PEARCH_ERROR_TooManyFileArguments = 22
|
||||||
|
|
||||||
|
#PEARCH_ERROR_UnknownAchitecture = 30
|
||||||
|
EndEnumeration
|
||||||
|
|
||||||
|
|
||||||
|
;- Globals
|
||||||
|
Global ExitCode.i = #PEARCH_ERROR_None
|
||||||
|
|
||||||
|
Global OptionAsHex.b = #False
|
||||||
|
Global OptionAsError.b = #False
|
||||||
|
Global OptionFullText.b = #False
|
||||||
|
|
||||||
|
Global InputFile$ = #Null$
|
||||||
|
|
||||||
|
|
||||||
|
;- Macros
|
||||||
|
Macro HandlePeArch(ShortText, FullText, Code)
|
||||||
|
If OptionAsHex
|
||||||
|
PrintN(Hex(Code, #PB_Word))
|
||||||
|
Else
|
||||||
|
If OptionFullText
|
||||||
|
PrintN(FullText)
|
||||||
|
Else
|
||||||
|
PrintN(ShortText)
|
||||||
|
EndIf
|
||||||
|
EndIf
|
||||||
|
If OptionAsError
|
||||||
|
ExitCode = Code
|
||||||
|
EndIf
|
||||||
|
EndMacro
|
||||||
|
|
||||||
|
|
||||||
|
;- Procedures
|
||||||
|
Procedure PrintUsageText(PrintFull.b = #False)
|
||||||
|
Define UsageText$
|
||||||
|
|
||||||
|
Restore UsageText
|
||||||
|
|
||||||
|
Read.s UsageText$
|
||||||
|
PrintN(UsageText$)
|
||||||
|
|
||||||
|
If PrintFull
|
||||||
|
Read.s UsageText$
|
||||||
|
PrintN(UsageText$)
|
||||||
|
EndIf
|
||||||
|
EndProcedure
|
||||||
|
|
||||||
|
; Checks if the current process was started via another process (CMD), or not.
|
||||||
|
Procedure.b IsProgramRunDirectly()
|
||||||
|
; Will act as a DWORD[2]
|
||||||
|
Define ProcessListBuffer.q
|
||||||
|
ProcedureReturn Bool(GetConsoleProcessList_(@ProcessListBuffer, 2) <= 1)
|
||||||
|
EndProcedure
|
||||||
|
|
||||||
|
|
||||||
|
;- App's code
|
||||||
|
If Not OpenConsole("PEArch")
|
||||||
|
ExitCode = #PEARCH_ERROR_ConsoleError
|
||||||
|
Goto PEArch_End
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
|
||||||
|
Define IParam.i
|
||||||
|
For IParam = 0 To CountProgramParameters()
|
||||||
|
Define CurrentParam$ = ProgramParameter(IParam)
|
||||||
|
|
||||||
|
If Len(CurrentParam$) > 0
|
||||||
|
If Left(CurrentParam$, 1) <> "/"
|
||||||
|
If InputFile$ = #Null$
|
||||||
|
InputFile$ = CurrentParam$
|
||||||
|
Else
|
||||||
|
ConsoleError("More than one input file was given !")
|
||||||
|
ExitCode = #PEARCH_ERROR_TooManyFileArguments
|
||||||
|
PrintUsageText()
|
||||||
|
Goto PEArch_End
|
||||||
|
EndIf
|
||||||
|
Else
|
||||||
|
CurrentParam$ = UCase(CurrentParam$)
|
||||||
|
|
||||||
|
If CurrentParam$ = "/ASHEX" Or CurrentParam$ = "/H"
|
||||||
|
OptionAsHex = #True
|
||||||
|
ElseIf CurrentParam$ = "/?"
|
||||||
|
PrintUsageText(#True)
|
||||||
|
Goto PEArch_End
|
||||||
|
ElseIf CurrentParam$ = "/ASERROR" Or CurrentParam$ = "/E"
|
||||||
|
OptionAsError = #True
|
||||||
|
ElseIf CurrentParam$ = "/FULLTEXT" Or CurrentParam$ = "/F"
|
||||||
|
OptionFullText = #True
|
||||||
|
Else
|
||||||
|
ConsoleError("Unknown argument: '" + CurrentParam$ + "'")
|
||||||
|
ExitCode = #PEARCH_ERROR_UnknownArgument
|
||||||
|
PrintUsageText()
|
||||||
|
Goto PEArch_End
|
||||||
|
EndIf
|
||||||
|
EndIf
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
Next
|
||||||
|
|
||||||
|
|
||||||
|
If InputFile$ = #Null$
|
||||||
|
ConsoleError("No input file given !")
|
||||||
|
ExitCode = #PEARCH_ERROR_MissingFileArgument
|
||||||
|
PrintUsageText()
|
||||||
|
Goto PEArch_End
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
|
||||||
|
Define *Headers.IMAGE_NT_HEADERS32 = ImageNtHeaderHelper::GetImageNtHeader32(0, InputFile$)
|
||||||
|
If *Headers = #Null
|
||||||
|
Define HelperErrorCode.i = ImageNtHeaderHelper::GetLastError()
|
||||||
|
|
||||||
|
Select HelperErrorCode
|
||||||
|
Case ImageNtHeaderHelper::#INHH_ERROR_CannotOpenFile
|
||||||
|
ConsoleError("Cannot open file !")
|
||||||
|
ExitCode = #PEARCH_ERROR_INHH_ERROR_CannotOpenFile
|
||||||
|
|
||||||
|
Case ImageNtHeaderHelper::#INHH_ERROR_CannotCreateFileMapping
|
||||||
|
ConsoleError("Cannot create file mapping !")
|
||||||
|
ExitCode = #PEARCH_ERROR_INHH_ERROR_CannotCreateFileMapping
|
||||||
|
|
||||||
|
Case ImageNtHeaderHelper::#INHH_ERROR_CannotMapViewOfFile
|
||||||
|
ConsoleError("Cannot map view of file into memory !")
|
||||||
|
ExitCode = #PEARCH_ERROR_INHH_ERROR_CannotMapViewOfFile
|
||||||
|
|
||||||
|
Case ImageNtHeaderHelper::#INHH_ERROR_CannotRetrieveHeaders
|
||||||
|
ConsoleError("Cannot retrieve PE headers !")
|
||||||
|
ExitCode = #PEARCH_ERROR_INHH_ERROR_CannotRetrieveHeaders
|
||||||
|
|
||||||
|
Default
|
||||||
|
ConsoleError("Unknown 'ImageNtHeaderHelper' error ! ("+Str(HelperErrorCode)+")")
|
||||||
|
ExitCode = #PEARCH_ERROR_UnknownError
|
||||||
|
EndSelect
|
||||||
|
|
||||||
|
If OptionAsError
|
||||||
|
ExitCode = 0
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
Goto PEArch_End
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
|
||||||
|
Define PeArchId.u = *Headers\FileHeader\Machine
|
||||||
|
|
||||||
|
Select PeArchId
|
||||||
|
Case #IMAGE_FILE_MACHINE_UNKNOWN
|
||||||
|
HandlePeArch("UNKNOWN", "The content of this field is assumed To be applicable To any machine type", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_ALPHA
|
||||||
|
HandlePeArch("ALPHA", "Alpha AXP, 32-bit address space", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_ALPHA64
|
||||||
|
HandlePeArch("ALPHA64", "Alpha 64, 64-bit address space", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_AM33
|
||||||
|
HandlePeArch("AM33", "Matsushita AM33", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_AMD64
|
||||||
|
HandlePeArch("AMD64", "x64", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_ARM
|
||||||
|
HandlePeArch("ARM", "ARM little endian", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_ARM64
|
||||||
|
HandlePeArch("ARM64", "ARM64 little endian", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_ARM64EC
|
||||||
|
HandlePeArch("ARM64EC", "ABI that enables interoperability between native ARM64 And emulated x64 code.", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_ARM64X
|
||||||
|
HandlePeArch("ARM64X", "Binary format that allows both native ARM64 And ARM64EC code To coexist in the same file.", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_ARMNT
|
||||||
|
HandlePeArch("ARMNT", "ARM Thumb-2 little endian", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_AXP64
|
||||||
|
HandlePeArch("AXP64", "AXP 64 (Same As Alpha 64)", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_EBC
|
||||||
|
HandlePeArch("EBC", "EFI byte code", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_I386
|
||||||
|
HandlePeArch("I386", "Intel 386 Or later processors And compatible processors", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_IA64
|
||||||
|
HandlePeArch("IA64", "Intel Itanium processor family", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_LOONGARCH32
|
||||||
|
HandlePeArch("LOONGARCH32", "LoongArch 32-bit processor family", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_LOONGARCH64
|
||||||
|
HandlePeArch("LOONGARCH64", "LoongArch 64-bit processor family", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_M32R
|
||||||
|
HandlePeArch("M32R", "Mitsubishi M32R little endian", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_MIPS16
|
||||||
|
HandlePeArch("MIPS16", "MIPS16", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_MIPSFPU
|
||||||
|
HandlePeArch("MIPSFPU", "MIPS With FPU", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_MIPSFPU16
|
||||||
|
HandlePeArch("MIPSFPU16", "MIPS16 With FPU", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_POWERPC
|
||||||
|
HandlePeArch("POWERPC", "Power PC little endian", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_POWERPCFP
|
||||||
|
HandlePeArch("POWERPCFP", "Power PC With floating point support", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_R3000BE
|
||||||
|
HandlePeArch("R3000BE", "MIPS I compatible 32-bit big endian", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_R3000
|
||||||
|
HandlePeArch("R3000", "MIPS I compatible 32-bit little endian", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_R4000
|
||||||
|
HandlePeArch("R4000", "MIPS III compatible 64-bit little endian", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_R10000
|
||||||
|
HandlePeArch("R10000", "MIPS IV compatible 64-bit little endian", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_RISCV32
|
||||||
|
HandlePeArch("RISCV32", "RISC-V 32-bit address space", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_RISCV64
|
||||||
|
HandlePeArch("RISCV64", "RISC-V 64-bit address space", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_RISCV128
|
||||||
|
HandlePeArch("RISCV128", "RISC-V 128-bit address space", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_SH3
|
||||||
|
HandlePeArch("SH3", "Hitachi SH3", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_SH3DSP
|
||||||
|
HandlePeArch("SH3DSP", "Hitachi SH3 DSP", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_SH4
|
||||||
|
HandlePeArch("SH4", "Hitachi SH4", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_SH5
|
||||||
|
HandlePeArch("SH5", "Hitachi SH5", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_THUMB
|
||||||
|
HandlePeArch("THUMB", "Thumb", PeArchId)
|
||||||
|
Case #IMAGE_FILE_MACHINE_WCEMIPSV2
|
||||||
|
HandlePeArch("WCEMIPSV2", "MIPS little-endian WCE v2", PeArchId)
|
||||||
|
Default
|
||||||
|
If OptionAsHex
|
||||||
|
HandlePeArch("WCEMIPSV2", "MIPS little-endian WCE v2", PeArchId)
|
||||||
|
Else
|
||||||
|
If OptionAsError
|
||||||
|
ExitCode = 0
|
||||||
|
Else
|
||||||
|
ExitCode = #PEARCH_ERROR_UnknownAchitecture
|
||||||
|
EndIf
|
||||||
|
EndIf
|
||||||
|
EndSelect
|
||||||
|
|
||||||
|
|
||||||
|
ImageNtHeaderHelper::FreeImageNtHeader32(0)
|
||||||
|
|
||||||
|
|
||||||
|
PEArch_End:
|
||||||
|
If IsProgramRunDirectly()
|
||||||
|
PrintN("Press enter to exit...")
|
||||||
|
Input()
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
End ExitCode
|
||||||
|
|
||||||
|
|
||||||
|
;- Data section
|
||||||
|
DataSection
|
||||||
|
UsageText:
|
||||||
|
Data.s "PEArch.exe [/?] [/E|/AsError] [/H|/AsHex] [/F|/FullText] <File>" + #CRLF$ +
|
||||||
|
"" + #CRLF$ +
|
||||||
|
"Options:" + #CRLF$ +
|
||||||
|
" /? Prints this help text." + #CRLF$ +
|
||||||
|
" /E, /AsError Gives out the result as an error code." + #CRLF$ +
|
||||||
|
" /H, /AsHex Prints the architecture as a hex number." + #CRLF$ +
|
||||||
|
" /F, /FullText Prints a longer description of the architecture." + #CRLF$
|
||||||
|
Data.s "Errors:" + #CRLF$ +
|
||||||
|
" 0 - No error" + #CRLF$ +
|
||||||
|
" 1 - Console error" + #CRLF$ +
|
||||||
|
" 1 - Unknown error" + #CRLF$ +
|
||||||
|
" 12 - Unable to open the file" + #CRLF$ +
|
||||||
|
" 13 - Cannot create a file mapping" + #CRLF$ +
|
||||||
|
" 14 - Cannot map the file into memory" + #CRLF$ +
|
||||||
|
" 15 - Unable to retrieve the NT headers" + #CRLF$ +
|
||||||
|
" 20 - Unknown argument" + #CRLF$ +
|
||||||
|
" 21 - Missing file argument" + #CRLF$ +
|
||||||
|
" 22 - Too many file arguments" + #CRLF$ +
|
||||||
|
" 30 - The architecture is unknown, '/AsHex' will bypass it" + #CRLF$ +
|
||||||
|
#CRLF$ +
|
||||||
|
"Architectures:" + #CRLF$ +
|
||||||
|
" 0x0 - UNKNOWN - The content of this field is assumed To be applicable To any machine type" + #CRLF$ +
|
||||||
|
" 0x184 - ALPHA - Alpha AXP, 32-bit address space" + #CRLF$ +
|
||||||
|
" 0x284 - ALPHA64 - Alpha 64, 64-bit address space" + #CRLF$ +
|
||||||
|
" 0x1d3 - AM33 - Matsushita AM33" + #CRLF$ +
|
||||||
|
" 0x8664 - AMD64 - x64" + #CRLF$ +
|
||||||
|
" 0x1c0 - ARM - ARM little endian" + #CRLF$ +
|
||||||
|
" 0xaa64 - ARM64 - ARM64 little endian" + #CRLF$ +
|
||||||
|
" 0xA641 - ARM64EC - ABI that enables interoperability between native ARM64 And emulated x64 code." + #CRLF$ +
|
||||||
|
" 0xA64E - ARM64X - Binary format that allows both native ARM64 And ARM64EC code To coexist in the same file." + #CRLF$ +
|
||||||
|
" 0x1c4 - ARMNT - ARM Thumb-2 little endian" + #CRLF$ +
|
||||||
|
" 0x284 - AXP64 - AXP 64 (Same As Alpha 64)" + #CRLF$ +
|
||||||
|
" 0xebc - EBC - EFI byte code" + #CRLF$ +
|
||||||
|
" 0x14c - I386 - Intel 386 Or later processors And compatible processors" + #CRLF$ +
|
||||||
|
" 0x200 - IA64 - Intel Itanium processor family" + #CRLF$ +
|
||||||
|
" 0x6232 - LOONGARCH32 - LoongArch 32-bit processor family" + #CRLF$ +
|
||||||
|
" 0x6264 - LOONGARCH64 - LoongArch 64-bit processor family" + #CRLF$ +
|
||||||
|
" 0x9041 - M32R - Mitsubishi M32R little endian" + #CRLF$ +
|
||||||
|
" 0x266 - MIPS16 - MIPS16" + #CRLF$ +
|
||||||
|
" 0x366 - MIPSFPU - MIPS With FPU" + #CRLF$ +
|
||||||
|
" 0x466 - MIPSFPU16 - MIPS16 With FPU" + #CRLF$ +
|
||||||
|
" 0x1f0 - POWERPC - Power PC little endian" + #CRLF$ +
|
||||||
|
" 0x1f1 - POWERPCFP - Power PC With floating point support" + #CRLF$ +
|
||||||
|
" 0x160 - R3000BE - MIPS I compatible 32-bit big endian" + #CRLF$ +
|
||||||
|
" 0x162 - R3000 - MIPS I compatible 32-bit little endian" + #CRLF$ +
|
||||||
|
" 0x166 - R4000 - MIPS III compatible 64-bit little endian" + #CRLF$ +
|
||||||
|
" 0x168 - R10000 - MIPS IV compatible 64-bit little endian" + #CRLF$ +
|
||||||
|
" 0x5032 - RISCV32 - RISC-V 32-bit address space" + #CRLF$ +
|
||||||
|
" 0x5064 - RISCV64 - RISC-V 64-bit address space" + #CRLF$ +
|
||||||
|
" 0x5128 - RISCV128 - RISC-V 128-bit address space" + #CRLF$ +
|
||||||
|
" 0x1a2 - SH3 - Hitachi SH3" + #CRLF$ +
|
||||||
|
" 0x1a3 - SH3DSP - Hitachi SH3 DSP" + #CRLF$ +
|
||||||
|
" 0x1a6 - SH4 - Hitachi SH4" + #CRLF$ +
|
||||||
|
" 0x1a8 - SH5 - Hitachi SH5" + #CRLF$ +
|
||||||
|
" 0x1c2 - THUMB - Thumb" + #CRLF$ +
|
||||||
|
" 0x169 - WCEMIPSV2 - MIPS little-endian WCE v2" + #CRLF$
|
||||||
|
EndDataSection
|
||||||
|
|
||||||
|
; IDE Options = PureBasic 6.21 (Windows - x64)
|
||||||
|
; CursorPosition = 220
|
||||||
|
; FirstLine = 212
|
||||||
|
; Folding = -
|
||||||
|
; EnableXP
|
||||||
|
; DPIAware
|
||||||
+105
@@ -0,0 +1,105 @@
|
|||||||
|
;{- Code Header
|
||||||
|
; ==- Basic Info -================================
|
||||||
|
; Name: PB-CTypes.pbi
|
||||||
|
; Version: 0.0.1
|
||||||
|
; Author: Herwin Bozet
|
||||||
|
;
|
||||||
|
; ==- Compatibility -=============================
|
||||||
|
; Compiler version:
|
||||||
|
; * PureBasic 6.0 LTS
|
||||||
|
; * PureBasic 6.0 LTS - C Backend
|
||||||
|
;
|
||||||
|
; ==- Links & License -===========================
|
||||||
|
; License: Unlicense
|
||||||
|
; GitHub: https://github.com/aziascreations/PB-CTypes
|
||||||
|
; Private Repo: https://git.nibblepoker.lu/aziascreations/PB-CTypes
|
||||||
|
;}
|
||||||
|
|
||||||
|
|
||||||
|
;- Compiler Directives
|
||||||
|
EnableExplicit
|
||||||
|
|
||||||
|
|
||||||
|
;- Constants
|
||||||
|
; SEC_IMAGE_NO_EXECUTE
|
||||||
|
; 0x11000000
|
||||||
|
CompilerIf Not Defined(SEC_IMAGE_NO_EXECUTE, #PB_Constant)
|
||||||
|
#SEC_IMAGE_NO_EXECUTE = $11000000
|
||||||
|
CompilerEndIf
|
||||||
|
|
||||||
|
|
||||||
|
If Not OpenConsole("DllWrapperMaker")
|
||||||
|
End 1
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
; If CountProgramParameters() <> 2
|
||||||
|
; PrintN("DllWrap <DLL> <Output>")
|
||||||
|
; EndIf
|
||||||
|
;
|
||||||
|
; Define DllPath$ = ProgramParameter()
|
||||||
|
; Define OutputPath$ = ProgramParameter()
|
||||||
|
|
||||||
|
Define DllPath1$ = "C:\Program Files\7-Zip\7-zip32.dll"
|
||||||
|
Define DllPath2$ = "C:\Program Files\7-Zip\7-zip.dll"
|
||||||
|
|
||||||
|
; Debug DllPath$
|
||||||
|
; Debug OutputPath$
|
||||||
|
|
||||||
|
Procedure GetImageCpuArch(ImagePath$)
|
||||||
|
; Mapping the file into memory
|
||||||
|
Define InputFileHandle = ReadFile(#PB_Any, ImagePath$)
|
||||||
|
|
||||||
|
If InputFileHandle = 0
|
||||||
|
PrintN("Unable to open input file !")
|
||||||
|
ProcedureReturn
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
Define InputFileMappingHandle = CreateFileMapping_(FileID(InputFileHandle), #Null, #PAGE_READONLY | #SEC_IMAGE_NO_EXECUTE, 0, 0, #Null)
|
||||||
|
|
||||||
|
If InputFileMappingHandle = #ERROR_ALREADY_EXISTS Or InputFileMappingHandle = 0
|
||||||
|
PrintN("Unable to create a file mapping !")
|
||||||
|
Goto GetImageCpuArch_CloseInputFileHandle
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
Define InputFileViewPtr.i = MapViewOfFile_(InputFileMappingHandle, #FILE_MAP_READ, 0, 0, 0)
|
||||||
|
If InputFileViewPtr = #Null
|
||||||
|
PrintN("Unable to map the input file into memory !")
|
||||||
|
Goto GetImageCpuArch_CloseInputFileHandle
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
; Retrieving the NT headers
|
||||||
|
Define *RetrievedNtHeaders.IMAGE_NT_HEADERS32 = ImageNtHeader_(InputFileViewPtr)
|
||||||
|
If *RetrievedNtHeaders = #Null
|
||||||
|
PrintN("Unable to retrieve the NT headers !")
|
||||||
|
Goto GetImageCpuArch_UnmapFileView
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
Debug *RetrievedNtHeaders\FileHeader\ Machine
|
||||||
|
|
||||||
|
; Do not do this !
|
||||||
|
;FreeMemory(*RetrievedNtHeaders)
|
||||||
|
|
||||||
|
; Cleaning up
|
||||||
|
GetImageCpuArch_UnmapFileView:
|
||||||
|
UnmapViewOfFile_(InputFileViewPtr)
|
||||||
|
|
||||||
|
GetImageCpuArch_CloseInputFileHandle:
|
||||||
|
CloseFile(InputFileHandle)
|
||||||
|
EndProcedure
|
||||||
|
|
||||||
|
GetImageCpuArch(DllPath1$)
|
||||||
|
|
||||||
|
GetImageCpuArch(DllPath2$)
|
||||||
|
|
||||||
|
Input()
|
||||||
|
|
||||||
|
; IDE Options = PureBasic 6.21 (Windows - x64)
|
||||||
|
; CursorPosition = 78
|
||||||
|
; FirstLine = 44
|
||||||
|
; Folding = -
|
||||||
|
; EnableXP
|
||||||
|
; DPIAware
|
||||||
|
; CommandLine = "C:\Program Files (x86)\PureBasic\Compilers\Engine3D.dll" "./test.pb"
|
||||||
|
; CompileSourceDirectory
|
||||||
|
; EnableCompileCount = 21
|
||||||
|
; EnableBuildCount = 0
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
;{- Code Header
|
||||||
|
; ==- Basic Info -================================
|
||||||
|
; Name: PB-CTypes.pbi
|
||||||
|
; Version: 0.0.1
|
||||||
|
; Author: Herwin Bozet
|
||||||
|
;
|
||||||
|
; ==- Compatibility -=============================
|
||||||
|
; Compiler version:
|
||||||
|
; * PureBasic 6.0 LTS
|
||||||
|
; * PureBasic 6.0 LTS - C Backend
|
||||||
|
;
|
||||||
|
; ==- Links & License -===========================
|
||||||
|
; License: Unlicense
|
||||||
|
; GitHub: https://github.com/aziascreations/PB-CTypes
|
||||||
|
; Private Repo: https://git.nibblepoker.lu/aziascreations/PB-CTypes
|
||||||
|
;}
|
||||||
|
|
||||||
|
|
||||||
|
;- Compiler Directives
|
||||||
|
EnableExplicit
|
||||||
|
|
||||||
|
|
||||||
|
;- Constants
|
||||||
|
; SEC_IMAGE_NO_EXECUTE
|
||||||
|
; 0x11000000
|
||||||
|
CompilerIf Not Defined(SEC_IMAGE_NO_EXECUTE, #PB_Constant)
|
||||||
|
#SEC_IMAGE_NO_EXECUTE = $11000000
|
||||||
|
CompilerEndIf
|
||||||
|
|
||||||
|
|
||||||
|
If Not OpenConsole("DllWrapperMaker")
|
||||||
|
End 1
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
If CountProgramParameters() <> 2
|
||||||
|
PrintN("DllWrap <DLL> <Output>")
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
Define DllPath$ = ProgramParameter()
|
||||||
|
Define OutputPath$ = ProgramParameter()
|
||||||
|
|
||||||
|
DllPath$ = "C:\Program Files\7-Zip\7-zip32.dll"
|
||||||
|
DllPath$ = "C:\Program Files\7-Zip\7-zip.dll"
|
||||||
|
|
||||||
|
; Debug DllPath$
|
||||||
|
; Debug OutputPath$
|
||||||
|
|
||||||
|
Procedure GetImageCpuArch(ImagePath$)
|
||||||
|
; Mapping the file into memory
|
||||||
|
Define InputFileHandle = ReadFile(#PB_Any, ImagePath$)
|
||||||
|
|
||||||
|
If InputFileHandle = 0
|
||||||
|
PrintN("Unable to open input file !")
|
||||||
|
ProcedureReturn
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
Define InputFileMappingHandle = CreateFileMapping_(FileID(InputFileHandle), #Null, #PAGE_READONLY | #SEC_IMAGE_NO_EXECUTE, 0, 0, #Null)
|
||||||
|
|
||||||
|
If InputFileMappingHandle = #ERROR_ALREADY_EXISTS Or InputFileMappingHandle = 0
|
||||||
|
PrintN("Unable to create a file mapping !")
|
||||||
|
Goto GetImageCpuArch_CloseInputFileHandle
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
Define InputFileViewPtr.i = MapViewOfFile_(InputFileMappingHandle, #FILE_MAP_READ, 0, 0, 0)
|
||||||
|
If InputFileViewPtr = #Null
|
||||||
|
PrintN("Unable to map the input file into memory !")
|
||||||
|
Goto GetImageCpuArch_CloseInputFileHandle
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
; Retrieving the NT headers
|
||||||
|
Define *RetrievedNtHeaders.IMAGE_NT_HEADERS32 = ImageNtHeader_(InputFileViewPtr)
|
||||||
|
If *RetrievedNtHeaders = #Null
|
||||||
|
PrintN("Unable to retrieve the NT headers !")
|
||||||
|
Goto GetImageCpuArch_UnmapFileView
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
Debug *RetrievedNtHeaders\FileHeader\ Machine
|
||||||
|
|
||||||
|
;FreeMemory(*RetrievedNtHeaders)
|
||||||
|
|
||||||
|
; Cleaning up
|
||||||
|
GetImageCpuArch_UnmapFileView:
|
||||||
|
UnmapViewOfFile_(InputFileViewPtr)
|
||||||
|
|
||||||
|
GetImageCpuArch_CloseInputFileHandle:
|
||||||
|
CloseFile(InputFileHandle)
|
||||||
|
EndProcedure
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GetImageCpuArch(DllPath$)
|
||||||
|
|
||||||
|
GetImageCpuArch(DllPath$)
|
||||||
|
|
||||||
|
GetImageCpuArch(DllPath$)
|
||||||
|
|
||||||
|
GetImageCpuArch(DllPath$)
|
||||||
|
|
||||||
|
Input()
|
||||||
|
|
||||||
|
; IDE Options = PureBasic 6.21 (Windows - x64)
|
||||||
|
; CursorPosition = 8
|
||||||
|
; Folding = -
|
||||||
|
; EnableXP
|
||||||
|
; DPIAware
|
||||||
|
; CommandLine = "C:\Program Files (x86)\PureBasic\Compilers\Engine3D.dll" "./test.pb"
|
||||||
|
; CompileSourceDirectory
|
||||||
|
; EnableCompileCount = 20
|
||||||
|
; EnableBuildCount = 0
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# PB-PEArch
|
||||||
|
A small tool that tells you which [CPU architecture](https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#machine-types)
|
||||||
|
a given [Windows PE](https://learn.microsoft.com/en-us/windows/win32/debug/pe-format) is made for.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
TODO
|
||||||
|
|
||||||
|
## License
|
||||||
|
All the code in this repo is released in the [Public Domain](LICENSE).
|
||||||
Reference in New Issue
Block a user