mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
Dbghelp
This commit is contained in:
@@ -0,0 +1,250 @@
|
|||||||
|
// +build windows
|
||||||
|
package sys_windows
|
||||||
|
|
||||||
|
foreign import "system:Dbghelp.lib"
|
||||||
|
|
||||||
|
RVA :: DWORD
|
||||||
|
|
||||||
|
MINIDUMP_LOCATION_DESCRIPTOR :: struct {
|
||||||
|
DataSize: ULONG32,
|
||||||
|
Rva: RVA,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_DIRECTORY :: struct {
|
||||||
|
StreamType: ULONG32,
|
||||||
|
Location: MINIDUMP_LOCATION_DESCRIPTOR,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_EXCEPTION_INFORMATION :: struct {
|
||||||
|
ThreadId: DWORD,
|
||||||
|
ExceptionPointers: ^EXCEPTION_POINTERS,
|
||||||
|
ClientPointers: BOOL,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_MEMORY_INFO :: struct {
|
||||||
|
BaseAddress: ULONG64,
|
||||||
|
AllocationBase: ULONG64,
|
||||||
|
AllocationProtect: ULONG32,
|
||||||
|
__alignment1: ULONG32,
|
||||||
|
RegionSize: ULONG64,
|
||||||
|
State: ULONG32,
|
||||||
|
Protect: ULONG32,
|
||||||
|
Type: ULONG32,
|
||||||
|
__alignment2: ULONG32,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_USER_STREAM :: struct {
|
||||||
|
Type: ULONG32,
|
||||||
|
BufferSize: ULONG,
|
||||||
|
Buffer: PVOID,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_USER_STREAM_INFORMATION :: struct {
|
||||||
|
UserStreamCount: ULONG,
|
||||||
|
UserStreamArray: ^MINIDUMP_USER_STREAM,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_CALLBACK_ROUTINE :: #type proc "stdcall" (
|
||||||
|
CallbackParam: PVOID,
|
||||||
|
CallbackInput: ^MINIDUMP_CALLBACK_INPUT,
|
||||||
|
CallbackOutpu: ^MINIDUMP_CALLBACK_OUTPUT,
|
||||||
|
) -> BOOL
|
||||||
|
|
||||||
|
MINIDUMP_CALLBACK_INFORMATION :: struct {
|
||||||
|
CallbackRoutine: MINIDUMP_CALLBACK_ROUTINE,
|
||||||
|
CallbackParam: PVOID,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_CALLBACK_INPUT :: struct {
|
||||||
|
ProcessId: ULONG,
|
||||||
|
ProcessHandle: HANDLE,
|
||||||
|
CallbackType: ULONG,
|
||||||
|
using _: struct #raw_union {
|
||||||
|
Status: HRESULT,
|
||||||
|
Thread: MINIDUMP_THREAD_CALLBACK,
|
||||||
|
ThreadEx: MINIDUMP_THREAD_EX_CALLBACK,
|
||||||
|
Module: MINIDUMP_MODULE_CALLBACK,
|
||||||
|
IncludeThread: MINIDUMP_INCLUDE_THREAD_CALLBACK,
|
||||||
|
IncludeModule: MINIDUMP_INCLUDE_MODULE_CALLBACK,
|
||||||
|
Io: MINIDUMP_IO_CALLBACK,
|
||||||
|
ReadMemoryFailure: MINIDUMP_READ_MEMORY_FAILURE_CALLBACK,
|
||||||
|
SecondaryFlags: ULONG,
|
||||||
|
VmQuery: MINIDUMP_VM_QUERY_CALLBACK,
|
||||||
|
VmPreRead: MINIDUMP_VM_PRE_READ_CALLBACK,
|
||||||
|
VmPostRead: MINIDUMP_VM_POST_READ_CALLBACK,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
_MINIDUMP_ARM64_PAD :: ULONG when ODIN_ARCH == .arm64 else struct {}
|
||||||
|
|
||||||
|
MINIDUMP_THREAD_CALLBACK :: struct {
|
||||||
|
ThreadId: ULONG,
|
||||||
|
ThreadHandle: HANDLE,
|
||||||
|
Pad: _MINIDUMP_ARM64_PAD,
|
||||||
|
Context: CONTEXT,
|
||||||
|
SizeOfContext: ULONG,
|
||||||
|
StackBase: ULONG64,
|
||||||
|
StackEnd: ULONG64,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_THREAD_EX_CALLBACK :: struct {
|
||||||
|
ThreadId: ULONG,
|
||||||
|
ThreadHandle: HANDLE,
|
||||||
|
Pad: _MINIDUMP_ARM64_PAD,
|
||||||
|
Context: CONTEXT,
|
||||||
|
SizeOfContext: ULONG,
|
||||||
|
StackBase: ULONG64,
|
||||||
|
StackEnd: ULONG64,
|
||||||
|
BackingStoreBase: ULONG64,
|
||||||
|
BackingStoreEnd: ULONG64,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_INCLUDE_THREAD_CALLBACK :: struct {
|
||||||
|
ThreadId: ULONG,
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE(jakubtomsu): From verrsrc.h
|
||||||
|
VS_FIXEDFILEINFO :: struct {
|
||||||
|
dwSignature: DWORD, /* e.g. 0xfeef04bd */
|
||||||
|
dwStrucVersion: DWORD, /* e.g. 0x00000042 = "0.42" */
|
||||||
|
dwFileVersionMS: DWORD, /* e.g. 0x00030075 = "3.75" */
|
||||||
|
dwFileVersionLS: DWORD, /* e.g. 0x00000031 = "0.31" */
|
||||||
|
dwProductVersionMS: DWORD, /* e.g. 0x00030010 = "3.10" */
|
||||||
|
dwProductVersionLS: DWORD, /* e.g. 0x00000031 = "0.31" */
|
||||||
|
dwFileFlagsMask: DWORD, /* = 0x3F for version "0.42" */
|
||||||
|
dwFileFlags: DWORD, /* e.g. VFF_DEBUG | VFF_PRERELEASE */
|
||||||
|
dwFileOS: DWORD, /* e.g. VOS_DOS_WINDOWS16 */
|
||||||
|
dwFileType: DWORD, /* e.g. VFT_DRIVER */
|
||||||
|
dwFileSubtype: DWORD, /* e.g. VFT2_DRV_KEYBOARD */
|
||||||
|
dwFileDateMS: DWORD, /* e.g. 0 */
|
||||||
|
dwFileDateLS: DWORD, /* e.g. 0 */
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_MODULE_CALLBACK :: struct {
|
||||||
|
FullPath: ^WCHAR,
|
||||||
|
BaseOfImage: ULONG64,
|
||||||
|
SizeOfImage: ULONG,
|
||||||
|
CheckSum: ULONG,
|
||||||
|
TimeDateStamp: ULONG,
|
||||||
|
VersionInfo: VS_FIXEDFILEINFO,
|
||||||
|
CvRecord: PVOID,
|
||||||
|
SizeOfCvRecord: ULONG,
|
||||||
|
MiscRecord: PVOID,
|
||||||
|
SizeOfMiscRecord: ULONG,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_INCLUDE_MODULE_CALLBACK :: struct {
|
||||||
|
BaseOfImage: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_IO_CALLBACK :: struct {
|
||||||
|
Handle: HANDLE,
|
||||||
|
Offset: ULONG64,
|
||||||
|
Buffer: PVOID,
|
||||||
|
BufferBytes: ULONG,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_READ_MEMORY_FAILURE_CALLBACK :: struct {
|
||||||
|
Offset: ULONG64,
|
||||||
|
Bytes: ULONG,
|
||||||
|
FailureStatus: HRESULT,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_VM_QUERY_CALLBACK :: struct {
|
||||||
|
Offset: ULONG64,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_VM_PRE_READ_CALLBACK :: struct {
|
||||||
|
Offset: ULONG64,
|
||||||
|
Buffer: PVOID,
|
||||||
|
Size: ULONG,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_VM_POST_READ_CALLBACK :: struct {
|
||||||
|
Offset: ULONG64,
|
||||||
|
Buffer: PVOID,
|
||||||
|
Size: ULONG,
|
||||||
|
Completed: ULONG,
|
||||||
|
Status: HRESULT,
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_CALLBACK_OUTPUT :: struct {
|
||||||
|
using _: struct #raw_union {
|
||||||
|
ModuleWriteFlags: ULONG,
|
||||||
|
ThreadWriteFlags: ULONG,
|
||||||
|
SecondaryFlags: ULONG,
|
||||||
|
using _: struct {
|
||||||
|
MemoryBase: ULONG64,
|
||||||
|
MemorySize: ULONG,
|
||||||
|
},
|
||||||
|
using _: struct {
|
||||||
|
CheckCancel: BOOL,
|
||||||
|
Cancel: BOOL,
|
||||||
|
},
|
||||||
|
Handle: HANDLE,
|
||||||
|
using _: struct {
|
||||||
|
VmRegion: MINIDUMP_MEMORY_INFO,
|
||||||
|
Continue: BOOL,
|
||||||
|
},
|
||||||
|
using _: struct {
|
||||||
|
VmQueryStatus: HRESULT,
|
||||||
|
VmQueryResult: MINIDUMP_MEMORY_INFO,
|
||||||
|
},
|
||||||
|
using _: struct {
|
||||||
|
VmReadStatus: HRESULT,
|
||||||
|
VmReadBytesCompleted: ULONG,
|
||||||
|
},
|
||||||
|
Status: HRESULT,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
MINIDUMP_TYPE :: enum u32 {
|
||||||
|
Normal = 0x00000000,
|
||||||
|
WithDataSegs = 0x00000001,
|
||||||
|
WithFullMemory = 0x00000002,
|
||||||
|
WithHandleData = 0x00000004,
|
||||||
|
FilterMemory = 0x00000008,
|
||||||
|
ScanMemory = 0x00000010,
|
||||||
|
WithUnloadedModules = 0x00000020,
|
||||||
|
WithIndirectlyReferencedMemory = 0x00000040,
|
||||||
|
FilterModulePaths = 0x00000080,
|
||||||
|
WithProcessThreadData = 0x00000100,
|
||||||
|
WithPrivateReadWriteMemory = 0x00000200,
|
||||||
|
WithoutOptionalData = 0x00000400,
|
||||||
|
WithFullMemoryInfo = 0x00000800,
|
||||||
|
WithThreadInfo = 0x00001000,
|
||||||
|
WithCodeSegs = 0x00002000,
|
||||||
|
WithoutAuxiliaryState = 0x00004000,
|
||||||
|
WithFullAuxiliaryState = 0x00008000,
|
||||||
|
WithPrivateWriteCopyMemory = 0x00010000,
|
||||||
|
IgnoreInaccessibleMemory = 0x00020000,
|
||||||
|
WithTokenInformation = 0x00040000,
|
||||||
|
WithModuleHeaders = 0x00080000,
|
||||||
|
FilterTriage = 0x00100000,
|
||||||
|
WithAvxXStateContext = 0x00200000,
|
||||||
|
WithIptTrace = 0x00400000,
|
||||||
|
ScanInaccessiblePartialPages = 0x00800000,
|
||||||
|
FilterWriteCombinedMemory = 0x01000000,
|
||||||
|
ValidTypeFlags = 0x01ffffff,
|
||||||
|
}
|
||||||
|
|
||||||
|
@(default_calling_convention = "stdcall")
|
||||||
|
foreign Dbghelp {
|
||||||
|
MiniDumpWriteDump :: proc(
|
||||||
|
hProcess: HANDLE,
|
||||||
|
ProcessId: DWORD,
|
||||||
|
hFile: HANDLE,
|
||||||
|
DumpType: MINIDUMP_TYPE,
|
||||||
|
ExceptionParam: ^MINIDUMP_EXCEPTION_INFORMATION,
|
||||||
|
UserStreamParam: ^MINIDUMP_USER_STREAM_INFORMATION,
|
||||||
|
CallbackPara: ^MINIDUMP_CALLBACK_INFORMATION,
|
||||||
|
) -> BOOL ---
|
||||||
|
|
||||||
|
MiniDumpReadDumpStream :: proc(
|
||||||
|
BaseOfDump: PVOID,
|
||||||
|
StreamNumber: ULONG,
|
||||||
|
Dir: ^^MINIDUMP_DIRECTORY,
|
||||||
|
StreamPointer: ^PVOID,
|
||||||
|
StreamSize: ^ULONG,
|
||||||
|
) -> BOOL ---
|
||||||
|
}
|
||||||
@@ -86,6 +86,8 @@ INT16 :: i16
|
|||||||
INT32 :: i32
|
INT32 :: i32
|
||||||
INT64 :: i64
|
INT64 :: i64
|
||||||
|
|
||||||
|
ULONG32 :: u32
|
||||||
|
LONG32 :: i32
|
||||||
|
|
||||||
ULONG64 :: u64
|
ULONG64 :: u64
|
||||||
LONG64 :: i64
|
LONG64 :: i64
|
||||||
|
|||||||
Reference in New Issue
Block a user