diff --git a/sdk/bindgen/bind_test.go b/sdk/bindgen/bind_test.go index 519f67af..8dca68ad 100644 --- a/sdk/bindgen/bind_test.go +++ b/sdk/bindgen/bind_test.go @@ -6,6 +6,8 @@ import ( "testing" "unicode" + "github.com/goradd/maps" + "github.com/ddkwork/app/bindgen/clang" "github.com/ddkwork/app/bindgen/gengo" "github.com/ddkwork/golibrary/mylog" @@ -51,15 +53,15 @@ func TestBindMacros(t *testing.T) { enumDebuggers = new(maps.SafeSliceMap[string, string]) enumIoctls = new(maps.SafeSliceMap[string, string]) ) - - for _, p := range macros.List() { - if !m.Has(p.Key) { - // mylog.Warning(p.Key, p.Value) - macros.Delete(p.Key) - continue + macros.Range(func(key string, value string) bool { + if !m.Has(key) { + // mylog.Warning(key, value) + macros.Delete(key) + // return true } - // mylog.Warning(p.Key, p.Value) - } + // mylog.Warning(key, value) + return true + }) g := stream.NewGeneratedFile() g.P("package sdk") @@ -69,76 +71,78 @@ func TestBindMacros(t *testing.T) { g.P() g.P("var (") - for _, p := range macros.List() { - p.Value = strings.TrimSpace(p.Value) - if strings.HasPrefix(p.Value, "sizeof") { - continue + macros.Range(func(key string, value string) bool { + value = strings.TrimSpace(value) + if strings.HasPrefix(value, "sizeof") { + return true } - if strings.HasSuffix(p.Value, "OPERATION_MANDATORY_DEBUGGEE_BIT") { - continue + if strings.HasSuffix(value, "OPERATION_MANDATORY_DEBUGGEE_BIT") { + return true } - if strings.Contains(p.Value, "sizeof") { - continue + if strings.Contains(value, "sizeof") { + return true } - if strings.Contains(p.Value, "TOP_LEVEL_DRIVERS_VMCALL_STARTING_NUMBER") { - continue + if strings.Contains(value, "TOP_LEVEL_DRIVERS_VMCALL_STARTING_NUMBER") { + return true } - p.Value = strings.ReplaceAll(p.Value, "\\", "") - p.Value = strings.Replace(p.Value, "6U", "6", 1) - p.Value = strings.Replace(p.Value, "7U", "7", 1) - p.Value = strings.Replace(p.Value, "8U", "8", 1) - p.Value = strings.Replace(p.Value, "9U", "9", 1) - p.Value = strings.Replace(p.Value, "10U", "10", 1) - p.Value = strings.Replace(p.Value, "11U", "11", 1) - p.Value = strings.Replace(p.Value, "12U", "12", 1) - p.Value = strings.Replace(p.Value, "13U", "13", 1) - p.Value = strings.Replace(p.Value, "14U", "14", 1) - p.Value = strings.Replace(p.Value, "15U", "15", 1) - p.Value = strings.Replace(p.Value, "16U", "16", 1) - p.Value = strings.Replace(p.Value, "17U", "17", 1) - p.Value = strings.Replace(p.Value, "NORMAL_PAGE_SIZE", "NormalPageSize", 1) - p.Value = strings.TrimSuffix(p.Value, "U") - p.Value = strings.TrimSuffix(p.Value, "ull") - - if len(p.Value) == 0 { - mylog.Todo(p.Key + " = " + p.Value) - continue + value = strings.ReplaceAll(value, "\\", "") + value = strings.Replace(value, "6U", "6", 1) + value = strings.Replace(value, "7U", "7", 1) + value = strings.Replace(value, "8U", "8", 1) + value = strings.Replace(value, "9U", "9", 1) + value = strings.Replace(value, "10U", "10", 1) + value = strings.Replace(value, "11U", "11", 1) + value = strings.Replace(value, "12U", "12", 1) + value = strings.Replace(value, "13U", "13", 1) + value = strings.Replace(value, "14U", "14", 1) + value = strings.Replace(value, "15U", "15", 1) + value = strings.Replace(value, "16U", "16", 1) + value = strings.Replace(value, "17U", "17", 1) + value = strings.Replace(value, "NORMAL_PAGE_SIZE", "NormalPageSize", 1) + value = strings.TrimSuffix(value, "U") + value = strings.TrimSuffix(value, "ull") + + if len(value) == 0 { + mylog.Todo(key + " = " + value) + return true } - if p.Value[0] == '(' && p.Value[len(p.Value)-1] == ')' { - p.Value = p.Value[1 : len(p.Value)-1] + if value[0] == '(' && value[len(value)-1] == ')' { + value = value[1 : len(value)-1] } - if strings.HasPrefix(p.Value, "0x") && !strings.Contains(p.Value, "//") && len(p.Value) > len("0xffffffff") { - // mylog.Todo(p.Key + " = " + p.Value) - p.Value = "uint64(" + p.Value + ")" + if strings.HasPrefix(value, "0x") && !strings.Contains(value, "//") && len(value) > len("0xffffffff") { + // mylog.Todo(key + " = " + value) + value = "uint64(" + value + ")" } - key := p.Key - //if key == "DEBUGGER_OPERATION_WAS_SUCCESSFUL" || strings.HasPrefix(key, "DEBUGGER_ERROR") { - // key += " debuggerErrorType" + k := key + //if k == "DEBUGGER_OPERATION_WAS_SUCCESSFUL" || strings.HasPrefix(k, "DEBUGGER_ERROR") { + // k += " debuggerErrorType" //} - value := p.Value - if isAlphabetOrUnderscore(value) { - value = stream.ToCamelUpper(value, false) + v := value + if isAlphabetOrUnderscore(v) { + v = stream.ToCamelUpper(v, false) } - key = stream.ToCamelUpper(key, false) + k = stream.ToCamelUpper(k, false) switch { - case strings.HasPrefix(p.Key, "DEBUGGER_ERROR"): - after, found := strings.CutPrefix(p.Key, "DEBUGGER_ERROR") + case strings.HasPrefix(k, "DEBUGGER_ERROR"): + after, found := strings.CutPrefix(k, "DEBUGGER_ERROR") if found { - key = after + k = after } - enumDebuggers.Set(key, key) - case strings.HasPrefix(p.Key, "IOCTL_"): - enumIoctls.Set(key, key) + enumDebuggers.Set(k, k) + case strings.HasPrefix(k, "IOCTL_"): + enumIoctls.Set(k, k) } - g.P(stream.ToCamelUpper(key, false) + "=" + value) - macros.Delete(p.Key) - } + g.P(stream.ToCamelUpper(k, false) + "=" + v) + macros.Delete(k) + return true + }) + g.P(")") g.P(` @@ -158,10 +162,11 @@ const ( stream.NewGeneratedFile().SetPackageName("sdk").SetFilePath("../").EnumTypes("debuggerError", enumDebuggers) stream.NewGeneratedFile().SetPackageName("sdk").SetFilePath("../").EnumTypes("ioctl", enumIoctls) - for _, p := range macros.List() { - return - mylog.Todo(p.Key + " = " + p.Value) - } + macros.Range(func(key string, value string) bool { + return true + mylog.Todo(key + " = " + value) + return true + }) } // isAlphabetOrUnderscore 检查字符串是否仅由字母或下划线组成 diff --git a/sdk/bindgen/command_test.go b/sdk/bindgen/command_test.go index f6ccbc1a..b3f9c367 100644 --- a/sdk/bindgen/command_test.go +++ b/sdk/bindgen/command_test.go @@ -8,6 +8,8 @@ import ( "strings" "testing" + "github.com/goradd/maps" + "github.com/ddkwork/HyperDbg/sdk" "github.com/ddkwork/golibrary/mylog" diff --git a/sdk/bindgen/macros_decode.go b/sdk/bindgen/macros_decode.go index 30db8083..750d8a23 100644 --- a/sdk/bindgen/macros_decode.go +++ b/sdk/bindgen/macros_decode.go @@ -3,7 +3,7 @@ package bindgen import ( "strings" - "github.com/ddkwork/golibrary/stream" + "github.com/goradd/maps" ) func extractMacros(lines []string) *maps.SafeSliceMap[string, string] { diff --git a/sdk/bindgen/merged_headers.h b/sdk/bindgen/merged_headers.h index d4e3828e..59d89f34 100644 --- a/sdk/bindgen/merged_headers.h +++ b/sdk/bindgen/merged_headers.h @@ -1,15 +1,3 @@ - -typedef unsigned char uint8_t; // 无符号8位整数 -typedef unsigned short uint16_t; // 无符号16位整数 -typedef unsigned int uint32_t; // 无符号32位整数 -typedef unsigned long long uint64_t; // 无符号64位整数 -typedef signed char int8_t; // 有符号8位整数 -typedef signed short int16_t; // 有符号16位整数 -typedef signed int int32_t; // 有符号32位整数 -typedef signed long long int64_t; // 有符号64位整数 -typedef int bool; // 使用 typedef 定义 bool 类型 - -typedef int* intptr_t; //bugfix.h #ifndef size_t #define size_t int @@ -67,7 +55,6 @@ typedef struct _LIST_ENTRY { #define _In_reads_bytes_(x) #endif - //SDK\Headers\BasicTypes.h /** * @file BasicTypes.h @@ -234,8 +221,8 @@ typedef struct _CR3_TYPE * @brief enum for reasons why debuggee is paused * */ -typedef enum DEBUGGEE_PAUSING_REASON_ { - +typedef enum _DEBUGGEE_PAUSING_REASON +{ // // For both kernel & user debugger @@ -271,8 +258,8 @@ typedef enum DEBUGGEE_PAUSING_REASON_ { * @brief enum for requested action for HyperDbg packet * */ -typedef enum DEBUGGER_REMOTE_PACKET_REQUESTED_ACTION_ { - +typedef enum _DEBUGGER_REMOTE_PACKET_REQUESTED_ACTION +{ // // Debugger to debuggee (user-mode execution) @@ -368,8 +355,8 @@ typedef enum DEBUGGER_REMOTE_PACKET_REQUESTED_ACTION_ { * @warning used in hwdbg * */ -typedef enum DEBUGGER_REMOTE_PACKET_TYPE_ { - +typedef enum _DEBUGGER_REMOTE_PACKET_TYPE +{ // // Debugger to debuggee (vmx-root) @@ -1101,8 +1088,8 @@ const unsigned char BuildSignature[] = { * @brief Different levels of paging * */ -typedef enum PAGING_LEVEL_ { - +typedef enum _PAGING_LEVEL +{ PagingLevelPageTable = 0, PagingLevelPageDirectory, PagingLevelPageDirectoryPointerTable, @@ -1117,8 +1104,8 @@ typedef enum PAGING_LEVEL_ { * @brief Inum of intentions for buffers (buffer tag) * */ -typedef enum POOL_ALLOCATION_INTENTION_ { - +typedef enum _POOL_ALLOCATION_INTENTION +{ TRACKING_HOOKED_PAGES, EXEC_TRAMPOLINE, SPLIT_2MB_PAGING_TO_4KB_PAGE, @@ -1146,8 +1133,8 @@ typedef enum POOL_ALLOCATION_INTENTION_ { // Debug Registers Modifications // ////////////////////////////////////////////////// -typedef enum DEBUG_REGISTER_TYPE_ { - +typedef enum _DEBUG_REGISTER_TYPE +{ BREAK_ON_INSTRUCTION_FETCH, BREAK_ON_WRITE_ONLY, BREAK_ON_IO_READ_OR_WRITE_NOT_SUPPORTED, @@ -1158,8 +1145,8 @@ typedef enum DEBUG_REGISTER_TYPE_ { // Execution Stages // ////////////////////////////////////////////////// -typedef enum VMX_EXECUTION_MODE_ { - +typedef enum _VMX_EXECUTION_MODE +{ VmxExecutionModeNonRoot = FALSE, VmxExecutionModeRoot = TRUE } VMX_EXECUTION_MODE; @@ -1168,8 +1155,8 @@ typedef enum VMX_EXECUTION_MODE_ { * @brief Type of calling the event * */ -typedef enum VMM_CALLBACK_EVENT_CALLING_STAGE_TYPE_ { - +typedef enum _VMM_CALLBACK_EVENT_CALLING_STAGE_TYPE +{ VMM_CALLBACK_CALLING_STAGE_INVALID_EVENT_EMULATION = 0, VMM_CALLBACK_CALLING_STAGE_PRE_EVENT_EMULATION = 1, VMM_CALLBACK_CALLING_STAGE_POST_EVENT_EMULATION = 2, @@ -1181,8 +1168,8 @@ typedef enum VMM_CALLBACK_EVENT_CALLING_STAGE_TYPE_ { * @brief enum to query different process and thread interception mechanisms * */ -typedef enum DEBUGGER_THREAD_PROCESS_TRACING_ { - +typedef enum _DEBUGGER_THREAD_PROCESS_TRACING +{ DEBUGGER_THREAD_PROCESS_TRACING_INTERCEPT_CLOCK_INTERRUPTS_FOR_THREAD_CHANGE, DEBUGGER_THREAD_PROCESS_TRACING_INTERCEPT_CLOCK_INTERRUPTS_FOR_PROCESS_CHANGE, @@ -1331,8 +1318,8 @@ typedef struct _DEBUGGEE_UD_PAUSED_PACKET * @brief Type of transferring buffer between user-to-kernel * */ -typedef enum NOTIFY_TYPE_ { - +typedef enum _NOTIFY_TYPE +{ IRP_BASED, EVENT_BASED } NOTIFY_TYPE; @@ -1387,8 +1374,8 @@ typedef struct _DIRECT_VMCALL_PARAMETERS * @brief different type of memory addresses * */ -typedef enum DEBUGGER_HOOK_MEMORY_TYPE_ { - +typedef enum _DEBUGGER_HOOK_MEMORY_TYPE +{ DEBUGGER_MEMORY_HOOK_VIRTUAL_ADDRESS, DEBUGGER_MEMORY_HOOK_PHYSICAL_ADDRESS } DEBUGGER_HOOK_MEMORY_TYPE; @@ -2099,8 +2086,8 @@ typedef struct _VMX_SEGMENT_SELECTOR * @brief Exceptions enum * */ -typedef enum EXCEPTION_VECTORS_ { - +typedef enum _EXCEPTION_VECTORS +{ EXCEPTION_VECTOR_DIVIDE_ERROR, EXCEPTION_VECTOR_DEBUG_BREAKPOINT, EXCEPTION_VECTOR_NMI, @@ -2153,8 +2140,8 @@ typedef enum EXCEPTION_VECTORS_ { * @brief The status of triggering events * */ -typedef enum VMM_CALLBACK_TRIGGERING_EVENT_STATUS_TYPE_ { - +typedef enum _VMM_CALLBACK_TRIGGERING_EVENT_STATUS_TYPE +{ VMM_CALLBACK_TRIGGERING_EVENT_STATUS_SUCCESSFUL_NO_INITIALIZED = 0, VMM_CALLBACK_TRIGGERING_EVENT_STATUS_SUCCESSFUL = 0, VMM_CALLBACK_TRIGGERING_EVENT_STATUS_SUCCESSFUL_IGNORE_EVENT = 1, @@ -2171,8 +2158,8 @@ typedef enum VMM_CALLBACK_TRIGGERING_EVENT_STATUS_TYPE_ { * @brief enum to show type of all HyperDbg events * */ -typedef enum VMM_EVENT_TYPE_ENUM_ { - +typedef enum _VMM_EVENT_TYPE_ENUM +{ // // EPT Memory Monitoring Events @@ -2255,8 +2242,8 @@ typedef enum VMM_EVENT_TYPE_ENUM_ { * @brief Type of Actions * */ -typedef enum DEBUGGER_EVENT_ACTION_TYPE_ENUM_ { - +typedef enum _DEBUGGER_EVENT_ACTION_TYPE_ENUM +{ BREAK_TO_DEBUGGER, RUN_SCRIPT, RUN_CUSTOM_CODE @@ -2267,8 +2254,8 @@ typedef enum DEBUGGER_EVENT_ACTION_TYPE_ENUM_ { * @brief Type of handling !syscall or !sysret * */ -typedef enum DEBUGGER_EVENT_SYSCALL_SYSRET_TYPE_ { - +typedef enum _DEBUGGER_EVENT_SYSCALL_SYSRET_TYPE +{ DEBUGGER_EVENT_SYSCALL_SYSRET_SAFE_ACCESS_MEMORY = 0, DEBUGGER_EVENT_SYSCALL_SYSRET_HANDLE_ALL_UD = 1, @@ -2280,8 +2267,8 @@ typedef enum DEBUGGER_EVENT_SYSCALL_SYSRET_TYPE_ { * @brief Type of mode change traps * */ -typedef enum DEBUGGER_EVENT_MODE_TYPE_ { - +typedef enum _DEBUGGER_EVENT_MODE_TYPE +{ DEBUGGER_EVENT_MODE_TYPE_USER_MODE_AND_KERNEL_MODE = 1, DEBUGGER_EVENT_MODE_TYPE_USER_MODE = 3, DEBUGGER_EVENT_MODE_TYPE_KERNEL_MODE = 0, @@ -2293,8 +2280,8 @@ typedef enum DEBUGGER_EVENT_MODE_TYPE_ { * @brief Type of tracing events * */ -typedef enum DEBUGGER_EVENT_TRACE_TYPE_ { - +typedef enum _DEBUGGER_EVENT_TRACE_TYPE +{ DEBUGGER_EVENT_TRACE_TYPE_INVALID = 0, DEBUGGER_EVENT_TRACE_TYPE_STEP_IN = 1, DEBUGGER_EVENT_TRACE_TYPE_STEP_OUT = 2, @@ -2306,8 +2293,8 @@ typedef enum DEBUGGER_EVENT_TRACE_TYPE_ { * @brief different types of modifying events request (enable/disable/clear) * */ -typedef enum DEBUGGER_MODIFY_EVENTS_TYPE_ { - +typedef enum _DEBUGGER_MODIFY_EVENTS_TYPE +{ DEBUGGER_MODIFY_EVENTS_QUERY_STATE, DEBUGGER_MODIFY_EVENTS_ENABLE, DEBUGGER_MODIFY_EVENTS_DISABLE, @@ -2366,8 +2353,8 @@ typedef struct _DEBUGGER_EVENT_OPTIONS * @brief Things to consider when applying resources * */ -typedef enum PROTECTED_HV_RESOURCES_PASSING_OVERS_ { - +typedef enum _PROTECTED_HV_RESOURCES_PASSING_OVERS +{ // // for exception bitmap // @@ -2401,8 +2388,8 @@ typedef enum PROTECTED_HV_RESOURCES_PASSING_OVERS_ { * @brief Type of protected (multi-used) resources * */ -typedef enum PROTECTED_HV_RESOURCES_TYPE_ { - +typedef enum _PROTECTED_HV_RESOURCES_TYPE +{ PROTECTED_HV_RESOURCES_EXCEPTION_BITMAP, PROTECTED_HV_RESOURCES_EXTERNAL_INTERRUPT_EXITING, @@ -2574,8 +2561,8 @@ typedef struct _DEBUGGER_EVENT_AND_ACTION_RESULT * @warning This file should be changed along with hwdbg files * */ -typedef enum HWDBG_ACTION_ENUMS_ { - +typedef enum _HWDBG_ACTION_ENUMS +{ hwdbgActionSendInstanceInfo = 1, hwdbgActionConfigureScriptBuffer = 2, @@ -2586,8 +2573,8 @@ typedef enum HWDBG_ACTION_ENUMS_ { * @warning This file should be changed along with hwdbg files * */ -typedef enum HWDBG_RESPONSE_ENUMS_ { - +typedef enum _HWDBG_RESPONSE_ENUMS +{ hwdbgResponseSuccessOrErrorMessage = 1, hwdbgResponseInstanceInfo = 2, @@ -2598,8 +2585,8 @@ typedef enum HWDBG_RESPONSE_ENUMS_ { * @warning This file should be changed along with hwdbg files * */ -typedef enum HWDBG_SUCCESS_OR_ERROR_ENUMS_ { - +typedef enum _HWDBG_SUCCESS_OR_ERROR_ENUMS +{ hwdbgOperationWasSuccessful = 0x7FFFFFFF, hwdbgErrorInvalidPacket = 1, @@ -3170,7 +3157,7 @@ typedef struct _PCI_TREE * */ #pragma once -//#include "Pcie.h" +#include "Pcie.h" #define SIZEOF_DEBUGGER_READ_PAGE_TABLE_ENTRIES_DETAILS \ sizeof(DEBUGGER_READ_PAGE_TABLE_ENTRIES_DETAILS) @@ -3247,8 +3234,8 @@ typedef struct _DEBUGGER_PAGE_IN_REQUEST * @brief different modes of reconstruct requests * */ -typedef enum REVERSING_MACHINE_RECONSTRUCT_MEMORY_MODE_ { - +typedef enum _REVERSING_MACHINE_RECONSTRUCT_MEMORY_MODE +{ REVERSING_MACHINE_RECONSTRUCT_MEMORY_MODE_UNKNOWN = 0, REVERSING_MACHINE_RECONSTRUCT_MEMORY_MODE_USER_MODE, REVERSING_MACHINE_RECONSTRUCT_MEMORY_MODE_KERNEL_MODE, @@ -3258,8 +3245,8 @@ typedef enum REVERSING_MACHINE_RECONSTRUCT_MEMORY_MODE_ { * @brief different types of reconstruct requests * */ -typedef enum REVERSING_MACHINE_RECONSTRUCT_MEMORY_TYPE_ { - +typedef enum _REVERSING_MACHINE_RECONSTRUCT_MEMORY_TYPE +{ REVERSING_MACHINE_RECONSTRUCT_MEMORY_TYPE_UNKNOWN = 0, REVERSING_MACHINE_RECONSTRUCT_MEMORY_TYPE_RECONSTRUCT, REVERSING_MACHINE_RECONSTRUCT_MEMORY_TYPE_PATTERN, @@ -3311,8 +3298,8 @@ typedef struct _DEBUGGER_DT_COMMAND_OPTIONS * @brief different types of prealloc requests * */ -typedef enum DEBUGGER_PREALLOC_COMMAND_TYPE_ { - +typedef enum _DEBUGGER_PREALLOC_COMMAND_TYPE +{ DEBUGGER_PREALLOC_COMMAND_TYPE_THREAD_INTERCEPTION, DEBUGGER_PREALLOC_COMMAND_TYPE_MONITOR, DEBUGGER_PREALLOC_COMMAND_TYPE_EPTHOOK, @@ -3346,8 +3333,8 @@ typedef struct _DEBUGGER_PREALLOC_COMMAND * @brief different types of preactivate requests * */ -typedef enum DEBUGGER_PREACTIVATE_COMMAND_TYPE_ { - +typedef enum _DEBUGGER_PREACTIVATE_COMMAND_TYPE +{ DEBUGGER_PREACTIVATE_COMMAND_TYPE_MODE, } DEBUGGER_PREACTIVATE_COMMAND_TYPE; @@ -3375,8 +3362,8 @@ typedef struct _DEBUGGER_PREACTIVATE_COMMAND * @brief different types of reading memory * */ -typedef enum DEBUGGER_READ_READING_TYPE_ { - +typedef enum _DEBUGGER_READ_READING_TYPE +{ READ_FROM_KERNEL, READ_FROM_VMX_ROOT } DEBUGGER_READ_READING_TYPE; @@ -3385,8 +3372,8 @@ typedef enum DEBUGGER_READ_READING_TYPE_ { * @brief different type of addresses * */ -typedef enum DEBUGGER_READ_MEMORY_TYPE_ { - +typedef enum _DEBUGGER_READ_MEMORY_TYPE +{ DEBUGGER_READ_PHYSICAL_ADDRESS, DEBUGGER_READ_VIRTUAL_ADDRESS } DEBUGGER_READ_MEMORY_TYPE; @@ -3395,8 +3382,8 @@ typedef enum DEBUGGER_READ_MEMORY_TYPE_ { * @brief different address mode * */ -typedef enum DEBUGGER_READ_MEMORY_ADDRESS_MODE_ { - +typedef enum _DEBUGGER_READ_MEMORY_ADDRESS_MODE +{ DEBUGGER_READ_ADDRESS_MODE_32_BIT, DEBUGGER_READ_ADDRESS_MODE_64_BIT @@ -3407,8 +3394,8 @@ typedef enum DEBUGGER_READ_MEMORY_ADDRESS_MODE_ { * the details of memory or disassemble them * */ -typedef enum DEBUGGER_SHOW_MEMORY_STYLE_ { - +typedef enum _DEBUGGER_SHOW_MEMORY_STYLE +{ DEBUGGER_SHOW_COMMAND_DT = 1, DEBUGGER_SHOW_COMMAND_DISASSEMBLE64, DEBUGGER_SHOW_COMMAND_DISASSEMBLE32, @@ -3469,8 +3456,8 @@ typedef struct _DEBUGGER_FLUSH_LOGGING_BUFFERS * @brief test query used for test purposed * */ -typedef enum DEBUGGER_TEST_QUERY_STATE_ { - +typedef enum _DEBUGGER_TEST_QUERY_STATE +{ TEST_QUERY_HALTING_CORE_STATUS = 1, // Query constant to show detail of halting of core TEST_QUERY_PREALLOCATED_POOL_STATE = 2, // Query pre-allocated pool state TEST_QUERY_TRAP_STATE = 3, // Query trap state @@ -3587,8 +3574,8 @@ typedef struct _DEBUGGER_SEND_USERMODE_MESSAGES_TO_DEBUGGER * @brief different types of actions on MSRs * */ -typedef enum DEBUGGER_MSR_ACTION_TYPE_ { - +typedef enum _DEBUGGER_MSR_ACTION_TYPE +{ DEBUGGER_MSR_READ, DEBUGGER_MSR_WRITE } DEBUGGER_MSR_ACTION_TYPE; @@ -3618,8 +3605,8 @@ typedef struct _DEBUGGER_READ_AND_WRITE_ON_MSR * @brief different type of addresses for editing memory * */ -typedef enum DEBUGGER_EDIT_MEMORY_TYPE_ { - +typedef enum _DEBUGGER_EDIT_MEMORY_TYPE +{ EDIT_VIRTUAL_MEMORY, EDIT_PHYSICAL_MEMORY } DEBUGGER_EDIT_MEMORY_TYPE; @@ -3628,8 +3615,8 @@ typedef enum DEBUGGER_EDIT_MEMORY_TYPE_ { * @brief size of editing memory * */ -typedef enum DEBUGGER_EDIT_MEMORY_BYTE_SIZE_ { - +typedef enum _DEBUGGER_EDIT_MEMORY_BYTE_SIZE +{ EDIT_BYTE, EDIT_DWORD, EDIT_QWORD @@ -3660,8 +3647,8 @@ typedef struct _DEBUGGER_EDIT_MEMORY * @brief different types of address for searching on memory * */ -typedef enum DEBUGGER_SEARCH_MEMORY_TYPE_ { - +typedef enum _DEBUGGER_SEARCH_MEMORY_TYPE +{ SEARCH_PHYSICAL_MEMORY, SEARCH_VIRTUAL_MEMORY, SEARCH_PHYSICAL_FROM_VIRTUAL_MEMORY, @@ -3672,8 +3659,8 @@ typedef enum DEBUGGER_SEARCH_MEMORY_TYPE_ { * @brief different sizes on searching memory * */ -typedef enum DEBUGGER_SEARCH_MEMORY_BYTE_SIZE_ { - +typedef enum _DEBUGGER_SEARCH_MEMORY_BYTE_SIZE +{ SEARCH_BYTE, SEARCH_DWORD, SEARCH_QWORD @@ -3772,8 +3759,8 @@ typedef struct _DEBUGGEE_CHANGE_CORE_PACKET * @brief different actions of switchings * */ -typedef enum DEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS_ACTION_TYPE_ { - +typedef enum _DEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS_ACTION_TYPE +{ DEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS_ACTION_ATTACH, DEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS_ACTION_DETACH, DEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS_ACTION_REMOVE_HOOKS, @@ -3813,8 +3800,8 @@ typedef struct _DEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS * @brief different type of process or thread queries * */ -typedef enum DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_TYPES_ { - +typedef enum _DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_TYPES +{ DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_QUERY_PROCESS_COUNT = 1, DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_QUERY_THREAD_COUNT = 2, DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_QUERY_PROCESS_LIST = 3, @@ -3828,8 +3815,8 @@ typedef enum DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_TYPES_ { * @brief different actions on showing or querying list of process or threads * */ -typedef enum DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_ACTIONS_ { - +typedef enum _DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_ACTIONS +{ DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_ACTION_SHOW_INSTANTLY = 1, DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_ACTION_QUERY_COUNT = 2, DEBUGGER_QUERY_ACTIVE_PROCESSES_OR_THREADS_ACTION_QUERY_SAVE_DETAILS = 3, @@ -3935,8 +3922,8 @@ typedef struct _DEBUGGER_SINGLE_CALLSTACK_FRAME * @brief callstack showing method * */ -typedef enum DEBUGGER_CALLSTACK_DISPLAY_METHOD_ { - +typedef enum _DEBUGGER_CALLSTACK_DISPLAY_METHOD +{ DEBUGGER_CALLSTACK_DISPLAY_METHOD_WITHOUT_PARAMS, DEBUGGER_CALLSTACK_DISPLAY_METHOD_WITH_PARAMS, @@ -4023,8 +4010,8 @@ typedef struct _DEBUGGER_EVENT_REQUEST_CUSTOM_CODE * @brief User-mode debugging actions * */ -typedef enum DEBUGGER_UD_COMMAND_ACTION_TYPE_ { - +typedef enum _DEBUGGER_UD_COMMAND_ACTION_TYPE +{ DEBUGGER_UD_COMMAND_ACTION_TYPE_NONE = 0, DEBUGGER_UD_COMMAND_ACTION_TYPE_PAUSE, DEBUGGER_UD_COMMAND_ACTION_TYPE_CONTINUE, @@ -4067,8 +4054,8 @@ typedef struct _DEBUGGER_UD_COMMAND_PACKET * @brief Debugger process switch and process details * */ -typedef enum DEBUGGEE_DETAILS_AND_SWITCH_PROCESS_TYPE_ { - +typedef enum _DEBUGGEE_DETAILS_AND_SWITCH_PROCESS_TYPE +{ DEBUGGEE_DETAILS_AND_SWITCH_PROCESS_GET_PROCESS_DETAILS, DEBUGGEE_DETAILS_AND_SWITCH_PROCESS_GET_PROCESS_LIST, @@ -4107,8 +4094,8 @@ typedef struct _DEBUGGEE_DETAILS_AND_SWITCH_PROCESS_PACKET * @brief Debugger thread switch and thread details * */ -typedef enum DEBUGGEE_DETAILS_AND_SWITCH_THREAD_TYPE_ { - +typedef enum _DEBUGGEE_DETAILS_AND_SWITCH_THREAD_TYPE +{ DEBUGGEE_DETAILS_AND_SWITCH_THREAD_PERFORM_SWITCH, DEBUGGEE_DETAILS_AND_SWITCH_THREAD_GET_THREAD_DETAILS, @@ -4148,8 +4135,8 @@ typedef struct _DEBUGGEE_DETAILS_AND_SWITCH_THREAD_PACKET * @brief stepping and tracking types * */ -typedef enum DEBUGGER_REMOTE_STEPPING_REQUEST_ { - +typedef enum _DEBUGGER_REMOTE_STEPPING_REQUEST +{ DEBUGGER_REMOTE_STEPPING_REQUEST_STEP_IN, DEBUGGER_REMOTE_STEPPING_REQUEST_INSTRUMENTATION_STEP_IN, DEBUGGER_REMOTE_STEPPING_REQUEST_INSTRUMENTATION_STEP_IN_FOR_TRACKING, @@ -4189,8 +4176,8 @@ typedef struct _DEBUGGEE_STEP_PACKET * @brief Perform actions related to APIC * */ -typedef enum DEBUGGER_APIC_REQUEST_TYPE_ { - +typedef enum _DEBUGGER_APIC_REQUEST_TYPE +{ DEBUGGER_APIC_REQUEST_TYPE_READ_LOCAL_APIC, } DEBUGGER_APIC_REQUEST_TYPE; @@ -4366,8 +4353,8 @@ typedef struct _DEBUGGEE_BP_PACKET * @brief breakpoint modification types * */ -typedef enum DEBUGGEE_BREAKPOINT_MODIFICATION_REQUEST_ { - +typedef enum _DEBUGGEE_BREAKPOINT_MODIFICATION_REQUEST +{ DEBUGGEE_BREAKPOINT_MODIFICATION_REQUEST_LIST_BREAKPOINTS, DEBUGGEE_BREAKPOINT_MODIFICATION_REQUEST_ENABLE, @@ -4395,8 +4382,8 @@ typedef struct _DEBUGGEE_BP_LIST_OR_MODIFY_PACKET * @brief Whether a jump is taken or not taken * */ -typedef enum DEBUGGER_CONDITIONAL_JUMP_STATUS_ { - +typedef enum _DEBUGGER_CONDITIONAL_JUMP_STATUS +{ DEBUGGER_CONDITIONAL_JUMP_STATUS_ERROR = 0, DEBUGGER_CONDITIONAL_JUMP_STATUS_NOT_CONDITIONAL_JUMP, @@ -4759,7 +4746,7 @@ static const char *const FunctionNames[] = { "FUNC_WCSNCMP", }; -typedef enum REGS_ENUM_ { +typedef enum REGS_ENUM { REGISTER_RAX = 0, REGISTER_EAX = 1, REGISTER_AX = 2, @@ -5509,4 +5496,3 @@ SymCastingQueryForFiledsAndTypes(_In_ const char * StructName, #endif - diff --git a/sdk/commands_types_gen.go b/sdk/commands_types_gen.go index ed5c485a..abb03846 100644 --- a/sdk/commands_types_gen.go +++ b/sdk/commands_types_gen.go @@ -1,6 +1,7 @@ package sdk import ( + "github.com/ddkwork/golibrary/stream" "strings" diff --git a/sdk/debuggerError_types_gen.go b/sdk/debuggerError_types_gen.go index 693c2c93..71b8642e 100644 --- a/sdk/debuggerError_types_gen.go +++ b/sdk/debuggerError_types_gen.go @@ -1,6 +1,7 @@ package sdk import ( + "github.com/ddkwork/golibrary/stream" "strings" diff --git a/sdk/ioctl_types_gen.go b/sdk/ioctl_types_gen.go index 05df8ff0..556a22bb 100644 --- a/sdk/ioctl_types_gen.go +++ b/sdk/ioctl_types_gen.go @@ -1,6 +1,7 @@ package sdk import ( + "github.com/ddkwork/golibrary/stream" "strings" diff --git a/ux/ark/ark.go b/ux/ark/ark.go index ca08678c..d4796527 100644 --- a/ux/ark/ark.go +++ b/ux/ark/ark.go @@ -36,7 +36,7 @@ func arkTodo() { } func Layout() *unison.Panel { - type ark struct{ Name ArksKind } + type ark struct{ Name ArksType } table, header := widget.NewTable(ark{}, widget.TableContext[ark]{ ContextMenuItems: nil, MarshalRow: func(node *widget.Node[ark]) (cells []widget.CellData) { @@ -53,7 +53,7 @@ func Layout() *unison.Panel { mylog.Todo("selection changed callback") }, SetRootRowsCallBack: func(root *widget.Node[ark]) { - for _, kind := range InvalidArksKind.Kinds() { + for _, kind := range KernelTablesType.EnumTypes() { root.AddChildByData(ark{kind}) } }, diff --git a/ux/ark/ark_test.go b/ux/ark/ark_test.go index 1c8394b7..5269d236 100644 --- a/ux/ark/ark_test.go +++ b/ux/ark/ark_test.go @@ -3,23 +3,25 @@ package ark import ( "testing" + "github.com/goradd/maps" + "github.com/ddkwork/golibrary/stream" ) func TestName(t *testing.T) { g := stream.NewGeneratedFile() - g.EnumTypes("arks", []string{ - "kernelTables", - "explorer", - "taskManager", - "driverTool", - "registryEditor", - "hardwareMonitor", - "hardwareHook", - "randomHook", - "environmentEditor", - "vstart", - "crypt", - "packer", - }, nil) + m := new(maps.SafeSliceMap[string, string]) + m.Set("kernelTables", "kernelTables") + m.Set("explorer", "explorer") + m.Set("taskManager", "taskManager") + m.Set("driverTool", "driverTool") + m.Set("registryEditor", "registryEditor") + m.Set("hardwareMonitor", "hardwareMonitor") + m.Set("hardwareHook", "hardwareHook") + m.Set("randomHook", "randomHook") + m.Set("environmentEditor", "environmentEditor") + m.Set("vstart", "vstart") + m.Set("crypt", "crypt") + m.Set("packer", "packer") + g.EnumTypes("arks", m) } diff --git a/ux/ark/arks_enum_gen.go b/ux/ark/arks_enum_gen.go deleted file mode 100644 index 4b9329da..00000000 --- a/ux/ark/arks_enum_gen.go +++ /dev/null @@ -1,136 +0,0 @@ -package ark - -import ( - "strings" - - -) - -// Code generated by GeneratedFile enum - DO NOT EDIT. - -type ArksKind byte - -const ( - KernelTablesKind ArksKind = iota - ExplorerKind - TaskManagerKind - DriverToolKind - RegistryEditorKind - HardwareMonitorKind - HardwareHookKind - RandomHookKind - EnvironmentEditorKind - VstartKind - CryptKind - PackerKind - InvalidArksKind -) - -func ConvertInteger2ArksKind[T stream.Integer](v T) ArksKind { - return ArksKind(v) -} - -func (k ArksKind) AssertKind(kinds string) ArksKind { - for _, kind := range k.Kinds() { - if strings.ToLower(kinds) == strings.ToLower(kind.String()) { - return kind - } - } - return InvalidArksKind -} - -func (k ArksKind) String() string { - switch k { - case KernelTablesKind: - return "KernelTables" - case ExplorerKind: - return "Explorer" - case TaskManagerKind: - return "TaskManager" - case DriverToolKind: - return "DriverTool" - case RegistryEditorKind: - return "RegistryEditor" - case HardwareMonitorKind: - return "HardwareMonitor" - case HardwareHookKind: - return "HardwareHook" - case RandomHookKind: - return "RandomHook" - case EnvironmentEditorKind: - return "EnvironmentEditor" - case VstartKind: - return "Vstart" - case CryptKind: - return "Crypt" - case PackerKind: - return "Packer" - default: - return "InvalidArksKind" - } -} - -func (k ArksKind) Keys() []string { - return []string{ - "KernelTables", - "Explorer", - "TaskManager", - "DriverTool", - "RegistryEditor", - "HardwareMonitor", - "HardwareHook", - "RandomHook", - "EnvironmentEditor", - "Vstart", - "Crypt", - "Packer", - } -} - -func (k ArksKind) Kinds() []ArksKind { - return []ArksKind{ - KernelTablesKind, - ExplorerKind, - TaskManagerKind, - DriverToolKind, - RegistryEditorKind, - HardwareMonitorKind, - HardwareHookKind, - RandomHookKind, - EnvironmentEditorKind, - VstartKind, - CryptKind, - PackerKind, - } -} - -func (k ArksKind) PngFileName() string { - switch k { - case KernelTablesKind: - return "KernelTables" - case ExplorerKind: - return "Explorer" - case TaskManagerKind: - return "TaskManager" - case DriverToolKind: - return "DriverTool" - case RegistryEditorKind: - return "RegistryEditor" - case HardwareMonitorKind: - return "HardwareMonitor" - case HardwareHookKind: - return "HardwareHook" - case RandomHookKind: - return "RandomHook" - case EnvironmentEditorKind: - return "EnvironmentEditor" - case VstartKind: - return "Vstart" - case CryptKind: - return "Crypt" - case PackerKind: - return "Packer" - default: - return "InvalidArksKind" - } -} diff --git a/ux/ark/arks_types_gen.go b/ux/ark/arks_types_gen.go new file mode 100644 index 00000000..ac99f897 --- /dev/null +++ b/ux/ark/arks_types_gen.go @@ -0,0 +1,144 @@ +package ark + +import ( + "strings" + + "github.com/ddkwork/golibrary/stream" +) + +// Code generated by GeneratedFile types - DO NOT EDIT. + +type ArksType uint8 + +const ( + KernelTablesType ArksType = iota + ExplorerType + TaskManagerType + DriverToolType + RegistryEditorType + HardwareMonitorType + HardwareHookType + RandomHookType + EnvironmentEditorType + VstartType + CryptType + PackerType +) + +func (t ArksType) Valid() bool { + return t >= KernelTablesType && t <= PackerType +} + +func ArksTypeBy[T stream.Integer](v T) ArksType { + return ArksType(v) +} + +func (t ArksType) AssertBy(name string) ArksType { + name = strings.TrimSuffix(name, "Type") + for _, n := range t.EnumTypes() { + if strings.ToLower(name) == strings.ToLower(n.String()) { + return n + } + } + panic("InvalidType") +} + +func (t ArksType) String() string { + switch t { + case KernelTablesType: + return "KernelTables" + case ExplorerType: + return "Explorer" + case TaskManagerType: + return "TaskManager" + case DriverToolType: + return "DriverTool" + case RegistryEditorType: + return "RegistryEditor" + case HardwareMonitorType: + return "HardwareMonitor" + case HardwareHookType: + return "HardwareHook" + case RandomHookType: + return "RandomHook" + case EnvironmentEditorType: + return "EnvironmentEditor" + case VstartType: + return "Vstart" + case CryptType: + return "Crypt" + case PackerType: + return "Packer" + default: + panic("InvalidType") + } +} + +func (t ArksType) Tooltip() string { + switch t { + case KernelTablesType: + return "kernelTables" + case ExplorerType: + return "explorer" + case TaskManagerType: + return "taskManager" + case DriverToolType: + return "driverTool" + case RegistryEditorType: + return "registryEditor" + case HardwareMonitorType: + return "hardwareMonitor" + case HardwareHookType: + return "hardwareHook" + case RandomHookType: + return "randomHook" + case EnvironmentEditorType: + return "environmentEditor" + case VstartType: + return "vstart" + case CryptType: + return "crypt" + case PackerType: + return "packer" + default: + panic("InvalidType") + } +} + +func (t ArksType) Names() []string { + return []string{ + "KernelTables", + "Explorer", + "TaskManager", + "DriverTool", + "RegistryEditor", + "HardwareMonitor", + "HardwareHook", + "RandomHook", + "EnvironmentEditor", + "Vstart", + "Crypt", + "Packer", + } +} + +func (t ArksType) EnumTypes() []ArksType { + return []ArksType{ + KernelTablesType, + ExplorerType, + TaskManagerType, + DriverToolType, + RegistryEditorType, + HardwareMonitorType, + HardwareHookType, + RandomHookType, + EnvironmentEditorType, + VstartType, + CryptType, + PackerType, + } +} + +func (t ArksType) SvgFileName() string { + return t.String() + ".svg" +}