mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-01 19:48:11 +00:00
entity parameter tree equipment; architecture -> arch
This commit is contained in:
@@ -131,8 +131,8 @@ dmn_rip_from_thread(DMN_Handle thread)
|
||||
U64 result = 0;
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
{
|
||||
Architecture arch = dmn_arch_from_thread(thread);
|
||||
U64 reg_block_size = regs_block_size_from_architecture(arch);
|
||||
Arch arch = dmn_arch_from_thread(thread);
|
||||
U64 reg_block_size = regs_block_size_from_arch(arch);
|
||||
void *reg_block = push_array(scratch.arena, U8, reg_block_size);
|
||||
dmn_thread_read_reg_block(thread, reg_block);
|
||||
result = regs_rip_from_arch_block(arch, reg_block);
|
||||
@@ -147,8 +147,8 @@ dmn_rsp_from_thread(DMN_Handle thread)
|
||||
U64 result = 0;
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
{
|
||||
Architecture arch = dmn_arch_from_thread(thread);
|
||||
U64 reg_block_size = regs_block_size_from_architecture(arch);
|
||||
Arch arch = dmn_arch_from_thread(thread);
|
||||
U64 reg_block_size = regs_block_size_from_arch(arch);
|
||||
void *reg_block = push_array(scratch.arena, U8, reg_block_size);
|
||||
dmn_thread_read_reg_block(thread, reg_block);
|
||||
result = regs_rsp_from_arch_block(arch, reg_block);
|
||||
|
||||
@@ -68,7 +68,7 @@ struct DMN_Event
|
||||
DMN_Handle process;
|
||||
DMN_Handle thread;
|
||||
DMN_Handle module;
|
||||
Architecture arch;
|
||||
Arch arch;
|
||||
U64 address;
|
||||
U64 size;
|
||||
String8 string;
|
||||
@@ -228,7 +228,7 @@ internal B32 dmn_process_write(DMN_Handle process, Rng1U64 range, void *src);
|
||||
#define dmn_process_write_struct(process, vaddr, ptr) dmn_process_write((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
||||
|
||||
//- rjf: threads
|
||||
internal Architecture dmn_arch_from_thread(DMN_Handle handle);
|
||||
internal Arch dmn_arch_from_thread(DMN_Handle handle);
|
||||
internal U64 dmn_stack_base_vaddr_from_thread(DMN_Handle handle);
|
||||
internal U64 dmn_tls_root_vaddr_from_thread(DMN_Handle handle);
|
||||
internal B32 dmn_thread_read_reg_block(DMN_Handle handle, void *reg_block);
|
||||
|
||||
@@ -131,7 +131,7 @@ dmn_process_write(DMN_Handle process, Rng1U64 range, void *src)
|
||||
|
||||
//- rjf: threads
|
||||
|
||||
internal Architecture
|
||||
internal Arch
|
||||
dmn_arch_from_thread(DMN_Handle handle)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -115,10 +115,10 @@ demon_lnx_open_memory_fd_for_pid(pid_t pid){
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal Architecture
|
||||
internal Arch
|
||||
demon_lnx_arch_from_pid(pid_t pid){
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
Architecture result = Architecture_Null;
|
||||
Arch result = Arch_Null;
|
||||
|
||||
// exe path
|
||||
String8 exe_path = demon_lnx_executable_path_from_pid(scratch.arena, pid);
|
||||
@@ -168,22 +168,22 @@ demon_lnx_arch_from_pid(pid_t pid){
|
||||
switch (ehdr.e_machine){
|
||||
case SYMS_ElfMachineKind_386:
|
||||
{
|
||||
result = Architecture_x86;
|
||||
result = Arch_x86;
|
||||
}break;
|
||||
|
||||
case SYMS_ElfMachineKind_ARM:
|
||||
{
|
||||
result = Architecture_arm32;
|
||||
result = Arch_arm32;
|
||||
}break;
|
||||
|
||||
case SYMS_ElfMachineKind_X86_64:
|
||||
{
|
||||
result = Architecture_x64;
|
||||
result = Arch_x64;
|
||||
}break;
|
||||
|
||||
case SYMS_ElfMachineKind_AARCH64:
|
||||
{
|
||||
result = Architecture_arm64;
|
||||
result = Arch_arm64;
|
||||
}break;
|
||||
}
|
||||
|
||||
@@ -192,9 +192,9 @@ demon_lnx_arch_from_pid(pid_t pid){
|
||||
}
|
||||
|
||||
internal DEMON_LNX_ProcessAux
|
||||
demon_lnx_aux_from_pid(pid_t pid, Architecture arch){
|
||||
demon_lnx_aux_from_pid(pid_t pid, Arch arch){
|
||||
DEMON_LNX_ProcessAux result = {0};
|
||||
B32 addr_32bit = (arch == Architecture_x86 || arch == Architecture_arm32);
|
||||
B32 addr_32bit = (arch == Arch_x86 || arch == Arch_arm32);
|
||||
|
||||
// open aux data
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
@@ -300,8 +300,8 @@ demon_lnx_phdr_info_from_memory(int memory_fd, B32 is_32bit, U64 phvaddr, U64 ph
|
||||
|
||||
internal DEMON_LNX_ModuleNode*
|
||||
demon_lnx_module_list_from_process(Arena *arena, DEMON_Entity *process){
|
||||
Architecture arch = (Architecture)process->arch;
|
||||
B32 is_32bit = (arch == Architecture_x86 || arch == Architecture_arm32);
|
||||
Arch arch = (Arch)process->arch;
|
||||
B32 is_32bit = (arch == Arch_x86 || arch == Arch_arm32);
|
||||
int memory_fd = (int)process->ext_u64;
|
||||
|
||||
// aux from pid
|
||||
@@ -839,11 +839,11 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *controls){
|
||||
U8 *trap_swap_bytes = 0;
|
||||
|
||||
if (result.first == 0){
|
||||
// TODO(allen): per-Architecture implementation of single steps
|
||||
// TODO(allen): per-Arch implementation of single steps
|
||||
// set single step bit
|
||||
if (single_step_thread != 0){
|
||||
switch (single_step_thread->arch){
|
||||
case Architecture_x86:
|
||||
case Arch_x86:
|
||||
{
|
||||
// TODO(allen): possibly buggy
|
||||
SYMS_RegX86 regs = {0};
|
||||
@@ -852,7 +852,7 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *controls){
|
||||
demon_os_write_regs_x86(single_step_thread, ®s);
|
||||
}break;
|
||||
|
||||
case Architecture_x64:
|
||||
case Arch_x64:
|
||||
{
|
||||
// TODO(allen): possibly buggy
|
||||
SYMS_RegX64 regs = {0};
|
||||
@@ -863,7 +863,7 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *controls){
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(allen): per-Architecture implementation of traps
|
||||
// TODO(allen): per-Arch implementation of traps
|
||||
trap_swap_bytes = push_array_no_zero(scratch.arena, U8, controls->trap_count);
|
||||
|
||||
{
|
||||
@@ -980,13 +980,13 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *controls){
|
||||
union{ SYMS_RegX86 x86; SYMS_RegX64 x64; } regs = {0};
|
||||
|
||||
switch (thread->arch){
|
||||
case Architecture_x86:
|
||||
case Arch_x86:
|
||||
{
|
||||
demon_os_read_regs_x86(thread, ®s.x86);
|
||||
instruction_pointer = regs.x86.eip.u32;
|
||||
}break;
|
||||
|
||||
case Architecture_x64:
|
||||
case Arch_x64:
|
||||
{
|
||||
demon_os_read_regs_x64(thread, ®s.x64);
|
||||
instruction_pointer = regs.x64.rip.u64;
|
||||
@@ -1052,7 +1052,7 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *controls){
|
||||
// this stuff in the log to make sense of it still.
|
||||
}
|
||||
else{
|
||||
Architecture arch = demon_lnx_arch_from_pid(new_pid);
|
||||
Arch arch = demon_lnx_arch_from_pid(new_pid);
|
||||
|
||||
// process entity
|
||||
DEMON_Entity *new_process = demon_ent_new(demon_ent_root, DEMON_EntityKind_Process, new_pid);
|
||||
@@ -1105,14 +1105,14 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *controls){
|
||||
if (e_kind == DEMON_EventKind_Breakpoint){
|
||||
// TODO(allen): possibly buggy
|
||||
switch (thread->arch){
|
||||
case Architecture_x86:
|
||||
case Arch_x86:
|
||||
{
|
||||
instruction_pointer -= 1;
|
||||
regs.x86.eip.u32 = instruction_pointer;
|
||||
demon_os_write_regs_x86(thread, ®s.x86);
|
||||
}break;
|
||||
|
||||
case Architecture_x64:
|
||||
case Arch_x64:
|
||||
{
|
||||
instruction_pointer -= 1;
|
||||
regs.x64.rip.u64 = instruction_pointer;
|
||||
@@ -1336,7 +1336,7 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *controls){
|
||||
|
||||
// cleanup
|
||||
if (did_run){
|
||||
// TODO(allen): per-Architecture
|
||||
// TODO(allen): per-Arch
|
||||
// unset traps
|
||||
{
|
||||
DEMON_OS_Trap *trap = controls->traps;
|
||||
@@ -1348,7 +1348,7 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *controls){
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(allen): per-Architecture
|
||||
// TODO(allen): per-Arch
|
||||
// unset single step bit
|
||||
// the single step bit is automatically unset whenever we single step
|
||||
// but if *something else* happened, it will still be there ready to
|
||||
@@ -1356,7 +1356,7 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *controls){
|
||||
if (single_step_thread != 0){
|
||||
// TODO(allen): possibly buggy
|
||||
switch (single_step_thread->arch){
|
||||
case Architecture_x86:
|
||||
case Arch_x86:
|
||||
{
|
||||
SYMS_RegX86 regs = {0};
|
||||
demon_os_read_regs_x86(single_step_thread, ®s);
|
||||
@@ -1364,7 +1364,7 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *controls){
|
||||
demon_os_write_regs_x86(single_step_thread, ®s);
|
||||
}break;
|
||||
|
||||
case Architecture_x64:
|
||||
case Arch_x64:
|
||||
{
|
||||
SYMS_RegX64 regs = {0};
|
||||
demon_os_read_regs_x64(single_step_thread, ®s);
|
||||
@@ -1555,7 +1555,7 @@ demon_os_launch_process(OS_LaunchOptions *options){
|
||||
else{
|
||||
result = pid;
|
||||
|
||||
Architecture arch = demon_lnx_arch_from_pid(pid);
|
||||
Arch arch = demon_lnx_arch_from_pid(pid);
|
||||
|
||||
// process entity
|
||||
DEMON_Entity *process = demon_ent_new(demon_ent_root, DEMON_EntityKind_Process, pid);
|
||||
@@ -1688,7 +1688,7 @@ demon_os_attach_process(U32 pid){
|
||||
|
||||
// initialize new entities on success
|
||||
if (result){
|
||||
Architecture arch = demon_lnx_arch_from_pid(the_process->pid);
|
||||
Arch arch = demon_lnx_arch_from_pid(the_process->pid);
|
||||
|
||||
// process entity
|
||||
DEMON_Entity *process = demon_ent_new(demon_ent_root, DEMON_EntityKind_Process, the_process->pid);
|
||||
@@ -1816,15 +1816,15 @@ internal U64
|
||||
demon_os_tls_root_vaddr_from_thread(DEMON_Entity *thread){
|
||||
U64 result = 0;
|
||||
switch (thread->arch){
|
||||
case Architecture_x64:
|
||||
case Architecture_x86:
|
||||
case Arch_x64:
|
||||
case Arch_x86:
|
||||
{
|
||||
U32 fsbase = 0;
|
||||
pid_t tid = (pid_t)thread->id;
|
||||
if (ptrace(PT_GETFSBASE, tid, (void*)&fsbase, 0) != -1){
|
||||
result = (U64)fsbase;
|
||||
}
|
||||
if (thread->arch == Architecture_x64){
|
||||
if (thread->arch == Arch_x64){
|
||||
result += 8;
|
||||
}
|
||||
else{
|
||||
|
||||
@@ -198,8 +198,8 @@ internal B32 demon_lnx_attach_pid(Arena *arena, pid_t pid, DEM
|
||||
internal String8 demon_lnx_executable_path_from_pid(Arena *arena, pid_t pid);
|
||||
internal int demon_lnx_open_memory_fd_for_pid(pid_t pid);
|
||||
|
||||
internal Architecture demon_lnx_arch_from_pid(pid_t pid);
|
||||
internal DEMON_LNX_ProcessAux demon_lnx_aux_from_pid(pid_t pid, Architecture arch);
|
||||
internal Arch demon_lnx_arch_from_pid(pid_t pid);
|
||||
internal DEMON_LNX_ProcessAux demon_lnx_aux_from_pid(pid_t pid, Arch arch);
|
||||
internal DEMON_LNX_PhdrInfo demon_lnx_phdr_info_from_memory(int memory_fd, B32 is_32bit,
|
||||
U64 phvaddr, U64 phstride, U64 phcount);
|
||||
internal DEMON_LNX_ModuleNode* demon_lnx_module_list_from_process(Arena *arena, DEMON_Entity *process);
|
||||
|
||||
@@ -492,23 +492,23 @@ dmn_w32_image_info_from_process_base_vaddr(HANDLE process, U64 base_vaddr)
|
||||
if(got_coff_header)
|
||||
{
|
||||
U64 optional_size_off = 0;
|
||||
Architecture arch = Architecture_Null;
|
||||
Arch arch = Arch_Null;
|
||||
switch(coff_header.machine)
|
||||
{
|
||||
case COFF_MachineType_X86:
|
||||
{
|
||||
arch = Architecture_x86;
|
||||
arch = Arch_x86;
|
||||
optional_size_off = OffsetOf(PE_OptionalHeader32, sizeof_image);
|
||||
}break;
|
||||
case COFF_MachineType_X64:
|
||||
{
|
||||
arch = Architecture_x64;
|
||||
arch = Arch_x64;
|
||||
optional_size_off = OffsetOf(PE_OptionalHeader32Plus, sizeof_image);
|
||||
}break;
|
||||
default:
|
||||
{}break;
|
||||
}
|
||||
if(arch != Architecture_Null)
|
||||
if(arch != Arch_Null)
|
||||
{
|
||||
U64 optional_off = coff_header_off + sizeof(coff_header);
|
||||
U32 size = 0;
|
||||
@@ -577,7 +577,7 @@ dmn_w32_xsave_tag_word_from_real_tag_word(U16 ftw)
|
||||
}
|
||||
|
||||
internal B32
|
||||
dmn_w32_thread_read_reg_block(Architecture arch, HANDLE thread, void *reg_block)
|
||||
dmn_w32_thread_read_reg_block(Arch arch, HANDLE thread, void *reg_block)
|
||||
{
|
||||
B32 result = 0;
|
||||
ProfBeginFunction();
|
||||
@@ -586,17 +586,17 @@ dmn_w32_thread_read_reg_block(Architecture arch, HANDLE thread, void *reg_block)
|
||||
////////////////////////////
|
||||
//- rjf: unimplemented win32/arch combos
|
||||
//
|
||||
case Architecture_Null:
|
||||
case Architecture_COUNT:
|
||||
case Arch_Null:
|
||||
case Arch_COUNT:
|
||||
{}break;
|
||||
case Architecture_arm64:
|
||||
case Architecture_arm32:
|
||||
case Arch_arm64:
|
||||
case Arch_arm32:
|
||||
{NotImplemented;}break;
|
||||
|
||||
////////////////////////////
|
||||
//- rjf: x86
|
||||
//
|
||||
case Architecture_x86:
|
||||
case Arch_x86:
|
||||
{
|
||||
REGS_RegBlockX86 *dst = (REGS_RegBlockX86 *)reg_block;
|
||||
|
||||
@@ -679,7 +679,7 @@ dmn_w32_thread_read_reg_block(Architecture arch, HANDLE thread, void *reg_block)
|
||||
////////////////////////////
|
||||
//- rjf: x64
|
||||
//
|
||||
case Architecture_x64:
|
||||
case Arch_x64:
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
REGS_RegBlockX64 *dst = (REGS_RegBlockX64 *)reg_block;
|
||||
@@ -871,7 +871,7 @@ dmn_w32_thread_read_reg_block(Architecture arch, HANDLE thread, void *reg_block)
|
||||
}
|
||||
|
||||
internal B32
|
||||
dmn_w32_thread_write_reg_block(Architecture arch, HANDLE thread, void *reg_block)
|
||||
dmn_w32_thread_write_reg_block(Arch arch, HANDLE thread, void *reg_block)
|
||||
{
|
||||
B32 result = 0;
|
||||
ProfBeginFunction();
|
||||
@@ -880,17 +880,17 @@ dmn_w32_thread_write_reg_block(Architecture arch, HANDLE thread, void *reg_block
|
||||
////////////////////////////
|
||||
//- rjf: unimplemented win32/arch combos
|
||||
//
|
||||
case Architecture_Null:
|
||||
case Architecture_COUNT:
|
||||
case Arch_Null:
|
||||
case Arch_COUNT:
|
||||
{}break;
|
||||
case Architecture_arm64:
|
||||
case Architecture_arm32:
|
||||
case Arch_arm64:
|
||||
case Arch_arm32:
|
||||
{NotImplemented;}break;
|
||||
|
||||
////////////////////////////
|
||||
//- rjf: x86
|
||||
//
|
||||
case Architecture_x86:
|
||||
case Arch_x86:
|
||||
{
|
||||
REGS_RegBlockX86 *src = (REGS_RegBlockX86 *)reg_block;
|
||||
|
||||
@@ -958,7 +958,7 @@ dmn_w32_thread_write_reg_block(Architecture arch, HANDLE thread, void *reg_block
|
||||
////////////////////////////
|
||||
//- rjf: x64
|
||||
//
|
||||
case Architecture_x64:
|
||||
case Arch_x64:
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
REGS_RegBlockX64 *src = (REGS_RegBlockX64 *)reg_block;
|
||||
@@ -1450,11 +1450,11 @@ dmn_ctrl_run(Arena *arena, DMN_CtrlCtx *ctx, DMN_RunCtrls *ctrls)
|
||||
if(!dmn_handle_match(ctrls->single_step_thread, dmn_handle_zero()))
|
||||
{
|
||||
DMN_W32_Entity *thread = dmn_w32_entity_from_handle(ctrls->single_step_thread);
|
||||
Architecture arch = thread->arch;
|
||||
Arch arch = thread->arch;
|
||||
switch(arch)
|
||||
{
|
||||
default:{}break;
|
||||
case Architecture_x64:
|
||||
case Arch_x64:
|
||||
{
|
||||
U32 ctx_flags = DMN_W32_CTX_X64|DMN_W32_CTX_INTEL_CONTROL;
|
||||
DWORD size = 0;
|
||||
@@ -1477,19 +1477,19 @@ dmn_ctrl_run(Arena *arena, DMN_CtrlCtx *ctx, DMN_RunCtrls *ctrls)
|
||||
if(!dmn_handle_match(ctrls->single_step_thread, dmn_handle_zero())) ProfScope("set single step bit")
|
||||
{
|
||||
DMN_W32_Entity *thread = dmn_w32_entity_from_handle(ctrls->single_step_thread);
|
||||
Architecture arch = thread->arch;
|
||||
Arch arch = thread->arch;
|
||||
switch(arch)
|
||||
{
|
||||
//- rjf: unimplemented win32/arch combos
|
||||
case Architecture_Null:
|
||||
case Architecture_COUNT:
|
||||
case Arch_Null:
|
||||
case Arch_COUNT:
|
||||
{}break;
|
||||
case Architecture_arm64:
|
||||
case Architecture_arm32:
|
||||
case Arch_arm64:
|
||||
case Arch_arm32:
|
||||
{NotImplemented;}break;
|
||||
|
||||
//- rjf: x86
|
||||
case Architecture_x86:
|
||||
case Arch_x86:
|
||||
{
|
||||
REGS_RegBlockX86 regs = {0};
|
||||
dmn_thread_read_reg_block(ctrls->single_step_thread, ®s);
|
||||
@@ -1498,7 +1498,7 @@ dmn_ctrl_run(Arena *arena, DMN_CtrlCtx *ctx, DMN_RunCtrls *ctrls)
|
||||
}break;
|
||||
|
||||
//- rjf: x64
|
||||
case Architecture_x64:
|
||||
case Arch_x64:
|
||||
{
|
||||
if(!GetThreadContext(thread->handle, single_step_thread_ctx))
|
||||
{
|
||||
@@ -2095,7 +2095,7 @@ dmn_ctrl_run(Arena *arena, DMN_CtrlCtx *ctx, DMN_RunCtrls *ctrls)
|
||||
default:
|
||||
{
|
||||
Temp temp = temp_begin(scratch.arena);
|
||||
U64 regs_block_size = regs_block_size_from_architecture(thread->arch);
|
||||
U64 regs_block_size = regs_block_size_from_arch(thread->arch);
|
||||
void *regs_block = push_array(scratch.arena, U8, regs_block_size);
|
||||
if(dmn_w32_thread_read_reg_block(thread->arch, thread->handle, regs_block))
|
||||
{
|
||||
@@ -2106,7 +2106,7 @@ dmn_ctrl_run(Arena *arena, DMN_CtrlCtx *ctx, DMN_RunCtrls *ctrls)
|
||||
}break;
|
||||
|
||||
//- rjf: x64 (fastpath)
|
||||
case Architecture_x64:
|
||||
case Arch_x64:
|
||||
{
|
||||
CONTEXT *ctx = 0;
|
||||
U32 ctx_flags = DMN_W32_CTX_X64|DMN_W32_CTX_INTEL_CONTROL;
|
||||
@@ -2464,26 +2464,26 @@ dmn_ctrl_run(Arena *arena, DMN_CtrlCtx *ctx, DMN_RunCtrls *ctrls)
|
||||
if(!dmn_handle_match(ctrls->single_step_thread, dmn_handle_zero())) ProfScope("unset single step bit")
|
||||
{
|
||||
DMN_W32_Entity *thread = dmn_w32_entity_from_handle(ctrls->single_step_thread);
|
||||
Architecture arch = thread->arch;
|
||||
Arch arch = thread->arch;
|
||||
switch(arch)
|
||||
{
|
||||
//- rjf: unimplemented win32/arch combos
|
||||
case Architecture_Null:
|
||||
case Architecture_COUNT:
|
||||
case Arch_Null:
|
||||
case Arch_COUNT:
|
||||
{}break;
|
||||
case Architecture_arm64:
|
||||
case Architecture_arm32:
|
||||
case Arch_arm64:
|
||||
case Arch_arm32:
|
||||
{NotImplemented;}break;
|
||||
|
||||
//- rjf: x86/64
|
||||
case Architecture_x86:
|
||||
case Arch_x86:
|
||||
{
|
||||
REGS_RegBlockX86 regs = {0};
|
||||
dmn_thread_read_reg_block(ctrls->single_step_thread, ®s);
|
||||
regs.eflags.u32 &= ~0x100;
|
||||
dmn_thread_write_reg_block(ctrls->single_step_thread, ®s);
|
||||
}break;
|
||||
case Architecture_x64:
|
||||
case Arch_x64:
|
||||
{
|
||||
if(!GetThreadContext(thread->handle, single_step_thread_ctx))
|
||||
{
|
||||
@@ -2737,10 +2737,10 @@ dmn_process_write(DMN_Handle process, Rng1U64 range, void *src)
|
||||
|
||||
//- rjf: threads
|
||||
|
||||
internal Architecture
|
||||
internal Arch
|
||||
dmn_arch_from_thread(DMN_Handle handle)
|
||||
{
|
||||
Architecture arch = Architecture_Null;
|
||||
Arch arch = Arch_Null;
|
||||
DMN_AccessScope
|
||||
{
|
||||
DMN_W32_Entity *entity = dmn_w32_entity_from_handle(handle);
|
||||
@@ -2762,18 +2762,18 @@ dmn_stack_base_vaddr_from_thread(DMN_Handle handle)
|
||||
U64 tlb = thread->thread.thread_local_base;
|
||||
switch(thread->arch)
|
||||
{
|
||||
case Architecture_Null:
|
||||
case Architecture_COUNT:
|
||||
case Arch_Null:
|
||||
case Arch_COUNT:
|
||||
{}break;
|
||||
case Architecture_arm64:
|
||||
case Architecture_arm32:
|
||||
case Arch_arm64:
|
||||
case Arch_arm32:
|
||||
{NotImplemented;}break;
|
||||
case Architecture_x64:
|
||||
case Arch_x64:
|
||||
{
|
||||
U64 stack_base_addr = tlb + 0x8;
|
||||
dmn_w32_process_read(process->handle, r1u64(stack_base_addr, stack_base_addr+8), &result);
|
||||
}break;
|
||||
case Architecture_x86:
|
||||
case Arch_x86:
|
||||
{
|
||||
U64 stack_base_addr = tlb + 0x4;
|
||||
dmn_w32_process_read(process->handle, r1u64(stack_base_addr, stack_base_addr+4), &result);
|
||||
@@ -2796,17 +2796,17 @@ dmn_tls_root_vaddr_from_thread(DMN_Handle handle)
|
||||
result = entity->thread.thread_local_base;
|
||||
switch(entity->arch)
|
||||
{
|
||||
case Architecture_Null:
|
||||
case Architecture_COUNT:
|
||||
case Arch_Null:
|
||||
case Arch_COUNT:
|
||||
{}break;
|
||||
case Architecture_arm64:
|
||||
case Architecture_arm32:
|
||||
case Arch_arm64:
|
||||
case Arch_arm32:
|
||||
{NotImplemented;}break;
|
||||
case Architecture_x64:
|
||||
case Arch_x64:
|
||||
{
|
||||
result += 88;
|
||||
}break;
|
||||
case Architecture_x86:
|
||||
case Arch_x86:
|
||||
{
|
||||
result += 44;
|
||||
}break;
|
||||
|
||||
@@ -106,7 +106,7 @@ struct DMN_W32_Entity
|
||||
U32 gen;
|
||||
U64 id;
|
||||
HANDLE handle;
|
||||
Architecture arch;
|
||||
Arch arch;
|
||||
union
|
||||
{
|
||||
struct
|
||||
@@ -174,7 +174,7 @@ struct DMN_W32_InjectedBreak
|
||||
typedef struct DMN_W32_ImageInfo DMN_W32_ImageInfo;
|
||||
struct DMN_W32_ImageInfo
|
||||
{
|
||||
Architecture arch;
|
||||
Arch arch;
|
||||
U32 size;
|
||||
};
|
||||
|
||||
@@ -277,8 +277,8 @@ internal DMN_W32_ImageInfo dmn_w32_image_info_from_process_base_vaddr(HANDLE pro
|
||||
//- rjf: threads
|
||||
internal U16 dmn_w32_real_tag_word_from_xsave(XSAVE_FORMAT *fxsave);
|
||||
internal U16 dmn_w32_xsave_tag_word_from_real_tag_word(U16 ftw);
|
||||
internal B32 dmn_w32_thread_read_reg_block(Architecture arch, HANDLE thread, void *reg_block);
|
||||
internal B32 dmn_w32_thread_write_reg_block(Architecture arch, HANDLE thread, void *reg_block);
|
||||
internal B32 dmn_w32_thread_read_reg_block(Arch arch, HANDLE thread, void *reg_block);
|
||||
internal B32 dmn_w32_thread_write_reg_block(Arch arch, HANDLE thread, void *reg_block);
|
||||
|
||||
//- rjf: remote thread injection
|
||||
internal DWORD dmn_w32_inject_thread(HANDLE process, U64 start_address);
|
||||
|
||||
Reference in New Issue
Block a user