mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-20 02:52:23 -07:00
ctrl/demon: fastfail exception codes / notes; p2r2: finish symbol conversion etc. in new wavefront-style version
This commit is contained in:
@@ -86,7 +86,7 @@ internal void
|
||||
tctx_lane_barrier_wait(void)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
ProfColor(0xff0000ff);
|
||||
ProfColor(0x00000ff);
|
||||
TCTX *tctx = tctx_selected();
|
||||
os_barrier_wait(tctx->lane_ctx.barrier);
|
||||
ProfEnd();
|
||||
|
||||
+78
-2
@@ -16,8 +16,8 @@ CTRL_EntityKindTable:
|
||||
{DebugInfoPath debug_info_path "Debug Info Path" }
|
||||
{PendingThreadName pending_thread_name "Pending Thread Name" }
|
||||
{PendingThreadColor pending_thread_color "Pending Thread Color" }
|
||||
{Breakpoint breakpoint "Breakpoint" }
|
||||
{AddressRangeAnnotation address_range_annotation "Address Range Annotation" }
|
||||
{Breakpoint breakpoint "Breakpoint" }
|
||||
{AddressRangeAnnotation address_range_annotation "Address Range Annotation" }
|
||||
}
|
||||
|
||||
@enum CTRL_EntityKind:
|
||||
@@ -114,3 +114,79 @@ CTRL_ExceptionCodeKindTable:
|
||||
`0`;
|
||||
@expand(CTRL_ExceptionCodeKindTable a) `$(a.default)`;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Exception Sub-Codes
|
||||
|
||||
@table(name, value)
|
||||
CTRL_ExceptionSubCodeKindTable:
|
||||
{
|
||||
{ W32_FAST_FAIL_LEGACY_GS_VIOLATION 0 }
|
||||
{ W32_FAST_FAIL_VTGUARD_CHECK_FAILURE 1 }
|
||||
{ W32_FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2 }
|
||||
{ W32_FAST_FAIL_CORRUPT_LIST_ENTRY 3 }
|
||||
{ W32_FAST_FAIL_INCORRECT_STACK 4 }
|
||||
{ W32_FAST_FAIL_INVALID_ARG 5 }
|
||||
{ W32_FAST_FAIL_GS_COOKIE_INIT 6 }
|
||||
{ W32_FAST_FAIL_FATAL_APP_EXIT 7 }
|
||||
{ W32_FAST_FAIL_RANGE_CHECK_FAILURE 8 }
|
||||
{ W32_FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9 }
|
||||
{ W32_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10 }
|
||||
{ W32_FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 11 }
|
||||
{ W32_FAST_FAIL_INVALID_FIBER_SWITCH 12 }
|
||||
{ W32_FAST_FAIL_INVALID_SET_OF_CONTEXT 13 }
|
||||
{ W32_FAST_FAIL_INVALID_REFERENCE_COUNT 14 }
|
||||
{ W32_FAST_FAIL_INVALID_JUMP_BUFFER 18 }
|
||||
{ W32_FAST_FAIL_MRDATA_MODIFIED 19 }
|
||||
{ W32_FAST_FAIL_CERTIFICATION_FAILURE 20 }
|
||||
{ W32_FAST_FAIL_INVALID_EXCEPTION_CHAIN 21 }
|
||||
{ W32_FAST_FAIL_CRYPTO_LIBRARY 22 }
|
||||
{ W32_FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT 23 }
|
||||
{ W32_FAST_FAIL_INVALID_IMAGE_BASE 24 }
|
||||
{ W32_FAST_FAIL_DLOAD_PROTECTION_FAILURE 25 }
|
||||
{ W32_FAST_FAIL_UNSAFE_EXTENSION_CALL 26 }
|
||||
{ W32_FAST_FAIL_DEPRECATED_SERVICE_INVOKED 27 }
|
||||
{ W32_FAST_FAIL_INVALID_BUFFER_ACCESS 28 }
|
||||
{ W32_FAST_FAIL_INVALID_BALANCED_TREE 29 }
|
||||
{ W32_FAST_FAIL_INVALID_NEXT_THREAD 30 }
|
||||
{ W32_FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED 31 }
|
||||
{ W32_FAST_FAIL_APCS_DISABLED 32 }
|
||||
{ W32_FAST_FAIL_INVALID_IDLE_STATE 33 }
|
||||
{ W32_FAST_FAIL_MRDATA_PROTECTION_FAILURE 34 }
|
||||
{ W32_FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION 35 }
|
||||
{ W32_FAST_FAIL_INVALID_LOCK_STATE 36 }
|
||||
{ W32_FAST_FAIL_GUARD_JUMPTABLE 37 }
|
||||
{ W32_FAST_FAIL_INVALID_LONGJUMP_TARGET 38 }
|
||||
{ W32_FAST_FAIL_INVALID_DISPATCH_CONTEXT 39 }
|
||||
{ W32_FAST_FAIL_INVALID_THREAD 40 }
|
||||
{ W32_FAST_FAIL_INVALID_SYSCALL_NUMBER 41 }
|
||||
{ W32_FAST_FAIL_INVALID_FILE_OPERATION 42 }
|
||||
{ W32_FAST_FAIL_LPAC_ACCESS_DENIED 43 }
|
||||
{ W32_FAST_FAIL_GUARD_SS_FAILURE 44 }
|
||||
{ W32_FAST_FAIL_LOADER_CONTINUITY_FAILURE 45 }
|
||||
{ W32_FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE 46 }
|
||||
{ W32_FAST_FAIL_INVALID_CONTROL_STACK 47 }
|
||||
{ W32_FAST_FAIL_SET_CONTEXT_DENIED 48 }
|
||||
{ W32_FAST_FAIL_INVALID_IAT 49 }
|
||||
{ W32_FAST_FAIL_HEAP_METADATA_CORRUPTION 50 }
|
||||
{ W32_FAST_FAIL_PAYLOAD_RESTRICTION_VIOLATION 51 }
|
||||
{ W32_FAST_FAIL_LOW_LABEL_ACCESS_DENIED 52 }
|
||||
{ W32_FAST_FAIL_ENCLAVE_CALL_FAILURE 53 }
|
||||
{ W32_FAST_FAIL_UNHANDLED_LSS_EXCEPTON 54 }
|
||||
{ W32_FAST_FAIL_ADMINLESS_ACCESS_DENIED 55 }
|
||||
{ W32_FAST_FAIL_UNEXPECTED_CALL 56 }
|
||||
{ W32_FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS 57 }
|
||||
{ W32_FAST_FAIL_UNEXPECTED_HOST_BEHAVIOR 58 }
|
||||
{ W32_FAST_FAIL_FLAGS_CORRUPTION 59 }
|
||||
{ W32_FAST_FAIL_VEH_CORRUPTION 60 }
|
||||
{ W32_FAST_FAIL_ETW_CORRUPTION 61 }
|
||||
{ W32_FAST_FAIL_RIO_ABORT 62 }
|
||||
{ W32_FAST_FAIL_INVALID_PFN 63 }
|
||||
{ W32_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE_XFG 64 }
|
||||
{ W32_FAST_FAIL_CAST_GUARD 65 }
|
||||
{ W32_FAST_FAIL_HOST_VISIBILITY_CHANGE 66 }
|
||||
{ W32_FAST_FAIL_KERNEL_CET_SHADOW_STACK_ASSIST 67 }
|
||||
{ W32_FAST_FAIL_PATCH_CALLBACK_FAILED 68 }
|
||||
{ W32_FAST_FAIL_NTDLL_PATCH_FAILED 69 }
|
||||
{ W32_FAST_FAIL_INVALID_FLS_DATA 70 }
|
||||
}
|
||||
|
||||
@@ -2404,6 +2404,13 @@ dmn_ctrl_run(Arena *arena, DMN_CtrlCtx *ctx, DMN_RunCtrls *ctrls)
|
||||
case DMN_W32_EXCEPTION_STACK_BUFFER_OVERRUN:
|
||||
{
|
||||
e->kind = DMN_EventKind_Trap;
|
||||
if(exception->ExceptionInformation[0] == DMN_W32_FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS)
|
||||
{
|
||||
// TODO(rjf): this is a shadow stack violation - this can imply that the spoof was hit.
|
||||
// need to handle this correctly in the ctrl layer when stepping w/ a spoof set.
|
||||
//
|
||||
// @shadow_stack_step
|
||||
}
|
||||
}break;
|
||||
|
||||
//- rjf: fill single-step event info
|
||||
|
||||
@@ -60,6 +60,82 @@
|
||||
#define DMN_W32_EXCEPTION_RADDBG_SET_BREAKPOINT 0x00524145u
|
||||
#define DMN_W32_EXCEPTION_RADDBG_SET_VADDR_RANGE_NOTE 0x00524156u
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Win32 Exception ExceptionInformation Codes
|
||||
//
|
||||
// used as a subcode, apparently in all cases, for DMN_W32_EXCEPTION_STACK_BUFFER_OVERRUN.
|
||||
// need to somehow pipe this through & interpret it correctly in outer layers... @fastfail
|
||||
|
||||
#define DMN_W32_FAST_FAIL_LEGACY_GS_VIOLATION 0
|
||||
#define DMN_W32_FAST_FAIL_VTGUARD_CHECK_FAILURE 1
|
||||
#define DMN_W32_FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2
|
||||
#define DMN_W32_FAST_FAIL_CORRUPT_LIST_ENTRY 3
|
||||
#define DMN_W32_FAST_FAIL_INCORRECT_STACK 4
|
||||
#define DMN_W32_FAST_FAIL_INVALID_ARG 5
|
||||
#define DMN_W32_FAST_FAIL_GS_COOKIE_INIT 6
|
||||
#define DMN_W32_FAST_FAIL_FATAL_APP_EXIT 7
|
||||
#define DMN_W32_FAST_FAIL_RANGE_CHECK_FAILURE 8
|
||||
#define DMN_W32_FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9
|
||||
#define DMN_W32_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10
|
||||
#define DMN_W32_FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 11
|
||||
#define DMN_W32_FAST_FAIL_INVALID_FIBER_SWITCH 12
|
||||
#define DMN_W32_FAST_FAIL_INVALID_SET_OF_CONTEXT 13
|
||||
#define DMN_W32_FAST_FAIL_INVALID_REFERENCE_COUNT 14
|
||||
#define DMN_W32_FAST_FAIL_INVALID_JUMP_BUFFER 18
|
||||
#define DMN_W32_FAST_FAIL_MRDATA_MODIFIED 19
|
||||
#define DMN_W32_FAST_FAIL_CERTIFICATION_FAILURE 20
|
||||
#define DMN_W32_FAST_FAIL_INVALID_EXCEPTION_CHAIN 21
|
||||
#define DMN_W32_FAST_FAIL_CRYPTO_LIBRARY 22
|
||||
#define DMN_W32_FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT 23
|
||||
#define DMN_W32_FAST_FAIL_INVALID_IMAGE_BASE 24
|
||||
#define DMN_W32_FAST_FAIL_DLOAD_PROTECTION_FAILURE 25
|
||||
#define DMN_W32_FAST_FAIL_UNSAFE_EXTENSION_CALL 26
|
||||
#define DMN_W32_FAST_FAIL_DEPRECATED_SERVICE_INVOKED 27
|
||||
#define DMN_W32_FAST_FAIL_INVALID_BUFFER_ACCESS 28
|
||||
#define DMN_W32_FAST_FAIL_INVALID_BALANCED_TREE 29
|
||||
#define DMN_W32_FAST_FAIL_INVALID_NEXT_THREAD 30
|
||||
#define DMN_W32_FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED 31 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_APCS_DISABLED 32
|
||||
#define DMN_W32_FAST_FAIL_INVALID_IDLE_STATE 33
|
||||
#define DMN_W32_FAST_FAIL_MRDATA_PROTECTION_FAILURE 34
|
||||
#define DMN_W32_FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION 35
|
||||
#define DMN_W32_FAST_FAIL_INVALID_LOCK_STATE 36
|
||||
#define DMN_W32_FAST_FAIL_GUARD_JUMPTABLE 37 // Known to compiler, must retain value 37
|
||||
#define DMN_W32_FAST_FAIL_INVALID_LONGJUMP_TARGET 38
|
||||
#define DMN_W32_FAST_FAIL_INVALID_DISPATCH_CONTEXT 39
|
||||
#define DMN_W32_FAST_FAIL_INVALID_THREAD 40
|
||||
#define DMN_W32_FAST_FAIL_INVALID_SYSCALL_NUMBER 41 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_INVALID_FILE_OPERATION 42 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_LPAC_ACCESS_DENIED 43 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_GUARD_SS_FAILURE 44
|
||||
#define DMN_W32_FAST_FAIL_LOADER_CONTINUITY_FAILURE 45 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE 46
|
||||
#define DMN_W32_FAST_FAIL_INVALID_CONTROL_STACK 47
|
||||
#define DMN_W32_FAST_FAIL_SET_CONTEXT_DENIED 48
|
||||
#define DMN_W32_FAST_FAIL_INVALID_IAT 49
|
||||
#define DMN_W32_FAST_FAIL_HEAP_METADATA_CORRUPTION 50
|
||||
#define DMN_W32_FAST_FAIL_PAYLOAD_RESTRICTION_VIOLATION 51
|
||||
#define DMN_W32_FAST_FAIL_LOW_LABEL_ACCESS_DENIED 52 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_ENCLAVE_CALL_FAILURE 53
|
||||
#define DMN_W32_FAST_FAIL_UNHANDLED_LSS_EXCEPTON 54
|
||||
#define DMN_W32_FAST_FAIL_ADMINLESS_ACCESS_DENIED 55 // Telemetry, nonfatal
|
||||
#define DMN_W32_FAST_FAIL_UNEXPECTED_CALL 56
|
||||
#define DMN_W32_FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS 57
|
||||
#define DMN_W32_FAST_FAIL_UNEXPECTED_HOST_BEHAVIOR 58
|
||||
#define DMN_W32_FAST_FAIL_FLAGS_CORRUPTION 59
|
||||
#define DMN_W32_FAST_FAIL_VEH_CORRUPTION 60
|
||||
#define DMN_W32_FAST_FAIL_ETW_CORRUPTION 61
|
||||
#define DMN_W32_FAST_FAIL_RIO_ABORT 62
|
||||
#define DMN_W32_FAST_FAIL_INVALID_PFN 63
|
||||
#define DMN_W32_FAST_FAIL_GUARD_ICALL_CHECK_FAILURE_XFG 64
|
||||
#define DMN_W32_FAST_FAIL_CAST_GUARD 65 // Known to compiler, must retain value 65
|
||||
#define DMN_W32_FAST_FAIL_HOST_VISIBILITY_CHANGE 66
|
||||
#define DMN_W32_FAST_FAIL_KERNEL_CET_SHADOW_STACK_ASSIST 67
|
||||
#define DMN_W32_FAST_FAIL_PATCH_CALLBACK_FAILED 68
|
||||
#define DMN_W32_FAST_FAIL_NTDLL_PATCH_FAILED 69
|
||||
#define DMN_W32_FAST_FAIL_INVALID_FLS_DATA 70
|
||||
#define DMN_W32_FAST_FAIL_INVALID_FAST_FAIL_CODE 0xFFFFFFFF
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Win32 Register Codes
|
||||
|
||||
|
||||
@@ -184,6 +184,11 @@ typedef struct PDB_GsiParsed
|
||||
PDB_GsiBucket buckets[4096];
|
||||
} PDB_GsiParsed;
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Globals
|
||||
|
||||
read_only global PDB_CompUnit pdb_comp_unit_nil = {0};
|
||||
|
||||
////////////////////////////////
|
||||
//~ PDB Parser Functions
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
//~ rjf: post-0.9.20 TODO notes
|
||||
//
|
||||
//- urgent fixes
|
||||
// [ ] (use msvc assert as an example) show fastfail exception info (code, name, etc.) - comes from ExceptionInformation @fastfail
|
||||
// [ ] stepping w/ spoofs & shadow stack enabled - writing spoof will send a stack buffer overrun event @shadow_stack_step
|
||||
// [ ] hardware breakpoints regression (global eval in ctrl)
|
||||
// [ ] native filesystem dialog, resizing raddbg window -> crash!
|
||||
//
|
||||
|
||||
+1236
-86
File diff suppressed because it is too large
Load Diff
@@ -16,25 +16,35 @@ struct P2R2_ConvertThreadParams
|
||||
B32 deterministic;
|
||||
};
|
||||
|
||||
typedef struct P2R2_UnitSymBlock P2R2_UnitSymBlock;
|
||||
struct P2R2_UnitSymBlock
|
||||
typedef struct P2R2_SymBlock P2R2_SymBlock;
|
||||
struct P2R2_SymBlock
|
||||
{
|
||||
P2R2_UnitSymBlock *next;
|
||||
U64 unit_idx;
|
||||
Rng1U64 unit_rec_range;
|
||||
P2R2_SymBlock *next;
|
||||
PDB_CompUnit *unit;
|
||||
CV_SymParsed *sym;
|
||||
CV_C13Parsed *c13;
|
||||
Rng1U64 sym_rec_range;
|
||||
};
|
||||
|
||||
typedef struct P2R2_UnitSymBlockList P2R2_UnitSymBlockList;
|
||||
struct P2R2_UnitSymBlockList
|
||||
typedef struct P2R2_SymBlockList P2R2_SymBlockList;
|
||||
struct P2R2_SymBlockList
|
||||
{
|
||||
P2R2_UnitSymBlock *first;
|
||||
P2R2_UnitSymBlock *last;
|
||||
P2R2_SymBlock *first;
|
||||
P2R2_SymBlock *last;
|
||||
};
|
||||
|
||||
typedef struct P2R2_UnitSubStartPtInfo P2R2_UnitSubStartPtInfo;
|
||||
struct P2R2_UnitSubStartPtInfo
|
||||
{
|
||||
CV_SymFrameproc last_frameproc;
|
||||
U64 last_proc_voff;
|
||||
};
|
||||
|
||||
typedef struct P2R2_Shared P2R2_Shared;
|
||||
struct P2R2_Shared
|
||||
{
|
||||
MSF_RawStreamTable *msf_raw_stream_table;
|
||||
U64 msf_stream_lane_counter;
|
||||
MSF_Parsed *msf;
|
||||
|
||||
PDB_Info *pdb_info;
|
||||
@@ -55,19 +65,25 @@ struct P2R2_Shared
|
||||
CV_LeafParsed *tpi_leaf;
|
||||
PDB_TpiHashParsed *ipi_hash;
|
||||
CV_LeafParsed *ipi_leaf;
|
||||
CV_SymParsed *sym;
|
||||
PDB_CompUnitArray *comp_units;
|
||||
PDB_CompUnitContributionArray *comp_unit_contributions;
|
||||
RDIM_Rng1U64ChunkList *unit_ranges;
|
||||
|
||||
CV_SymParsed **sym_for_unit;
|
||||
CV_C13Parsed **c13_for_unit;
|
||||
U64 sym_c13_unit_lane_counter;
|
||||
U64 all_syms_count;
|
||||
CV_SymParsed **all_syms; // [0] -> global; rest are unit nums
|
||||
CV_C13Parsed **all_c13s; // [0] -> blank (global); rest are unit nums
|
||||
|
||||
U64 exe_voff_max;
|
||||
RDI_Arch arch;
|
||||
U64 symbol_count_prediction;
|
||||
|
||||
P2R_LinkNameMap link_name_map;
|
||||
|
||||
U64 total_sym_record_count;
|
||||
P2R2_UnitSymBlockList *lane_sym_blocks;
|
||||
P2R2_SymBlockList *lane_sym_blocks;
|
||||
|
||||
P2R2_UnitSubStartPtInfo *lane_unit_sub_start_pt_infos;
|
||||
|
||||
String8Array *lane_file_paths;
|
||||
U64Array *lane_file_paths_hashes;
|
||||
@@ -78,8 +94,8 @@ struct P2R2_Shared
|
||||
P2R_SrcFileMap src_file_map;
|
||||
|
||||
RDIM_UnitChunkList all_units;
|
||||
RDIM_LineTable **units_first_inline_site_line_tables;
|
||||
RDIM_LineTableChunkList *lanes_line_tables;
|
||||
RDIM_LineTable **lanes_first_inline_site_line_tables;
|
||||
|
||||
RDIM_LineTableChunkList all_line_tables;
|
||||
|
||||
@@ -91,10 +107,12 @@ struct P2R2_Shared
|
||||
|
||||
RDIM_Type **itype_type_ptrs;
|
||||
RDIM_Type **basic_type_ptrs;
|
||||
RDIM_TypeChunkList all_types;
|
||||
RDIM_TypeChunkList all_types__pre_typedefs;
|
||||
|
||||
RDIM_UDTChunkList *lanes_udts;
|
||||
|
||||
RDIM_UDTChunkList all_udts;
|
||||
|
||||
RDIM_SymbolChunkList *lanes_procedures;
|
||||
RDIM_SymbolChunkList *lanes_global_variables;
|
||||
RDIM_SymbolChunkList *lanes_thread_variables;
|
||||
@@ -109,6 +127,7 @@ struct P2R2_Shared
|
||||
RDIM_SymbolChunkList all_constants;
|
||||
RDIM_ScopeChunkList all_scopes;
|
||||
RDIM_InlineSiteChunkList all_inline_sites;
|
||||
RDIM_TypeChunkList all_types;
|
||||
};
|
||||
|
||||
global P2R2_Shared *p2r2_shared = 0;
|
||||
|
||||
Reference in New Issue
Block a user