mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-05 13:28:40 +00:00
ptrace register reading debugging
This commit is contained in:
@@ -564,7 +564,8 @@ dmn_lnx_thread_read_reg_block(DMN_LNX_Entity *thread, void *reg_block)
|
|||||||
struct iovec iov_gpr = {0};
|
struct iovec iov_gpr = {0};
|
||||||
iov_gpr.iov_len = sizeof(ctx);
|
iov_gpr.iov_len = sizeof(ctx);
|
||||||
iov_gpr.iov_base = &ctx;
|
iov_gpr.iov_base = &ctx;
|
||||||
if(ptrace(PTRACE_GETREGSET, tid, (void*)NT_PRSTATUS, &iov_gpr) != -1)
|
int ptrace_result = ptrace(PTRACE_GETREGSET, tid, (void*)NT_PRSTATUS, &iov_gpr);
|
||||||
|
if(ptrace_result != -1)
|
||||||
{
|
{
|
||||||
got_gpr = 1;
|
got_gpr = 1;
|
||||||
DMN_LNX_UserRegsX64 *src = &ctx.regs;
|
DMN_LNX_UserRegsX64 *src = &ctx.regs;
|
||||||
@@ -595,6 +596,13 @@ dmn_lnx_thread_read_reg_block(DMN_LNX_Entity *thread, void *reg_block)
|
|||||||
dst->rip.u64 = src->rip;
|
dst->rip.u64 = src->rip;
|
||||||
dst->rflags.u64 = src->rflags;
|
dst->rflags.u64 = src->rflags;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int error_code = errno;
|
||||||
|
(void)error_code;
|
||||||
|
int x = 0;
|
||||||
|
(void)x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: read FPR
|
//- rjf: read FPR
|
||||||
@@ -612,12 +620,20 @@ dmn_lnx_thread_read_reg_block(DMN_LNX_Entity *thread, void *reg_block)
|
|||||||
struct iovec iov_xsave = {0};
|
struct iovec iov_xsave = {0};
|
||||||
iov_xsave.iov_len = sizeof(xsave_buffer);
|
iov_xsave.iov_len = sizeof(xsave_buffer);
|
||||||
iov_xsave.iov_base = xsave_buffer;
|
iov_xsave.iov_base = xsave_buffer;
|
||||||
if(ptrace(PTRACE_GETREGSET, tid, (void*)NT_X86_XSTATE, &iov_xsave) != -1)
|
int ptrace_result = ptrace(PTRACE_GETREGSET, tid, (void*)NT_X86_XSTATE, &iov_xsave);
|
||||||
|
if(ptrace_result != -1)
|
||||||
{
|
{
|
||||||
xsave = push_array_no_zero(scratch.arena, DMN_LNX_XSave, 1);
|
xsave = push_array_no_zero(scratch.arena, DMN_LNX_XSave, 1);
|
||||||
MemoryCopy(xsave, xsave_buffer, sizeof(*xsave));
|
MemoryCopy(xsave, xsave_buffer, sizeof(*xsave));
|
||||||
xsave_legacy = &xsave->legacy;
|
xsave_legacy = &xsave->legacy;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int error_code = errno;
|
||||||
|
(void)error_code;
|
||||||
|
int x = 0;
|
||||||
|
(void)x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: try fxsave
|
// rjf: try fxsave
|
||||||
@@ -627,11 +643,19 @@ dmn_lnx_thread_read_reg_block(DMN_LNX_Entity *thread, void *reg_block)
|
|||||||
struct iovec iov_fxsave = {0};
|
struct iovec iov_fxsave = {0};
|
||||||
iov_fxsave.iov_len = sizeof(fxsave);
|
iov_fxsave.iov_len = sizeof(fxsave);
|
||||||
iov_fxsave.iov_base = &fxsave;
|
iov_fxsave.iov_base = &fxsave;
|
||||||
if(ptrace(PTRACE_GETREGSET, tid, (void *)NT_FPREGSET, &iov_fxsave) != -1)
|
int ptrace_result = ptrace(PTRACE_GETREGSET, tid, (void *)NT_FPREGSET, &iov_fxsave);
|
||||||
|
if(ptrace_result != -1)
|
||||||
{
|
{
|
||||||
xsave_legacy = push_array_no_zero(scratch.arena, DMN_LNX_XSaveLegacy, 1);
|
xsave_legacy = push_array_no_zero(scratch.arena, DMN_LNX_XSaveLegacy, 1);
|
||||||
MemoryCopy(xsave_legacy, &fxsave, sizeof(*xsave_legacy));
|
MemoryCopy(xsave_legacy, &fxsave, sizeof(*xsave_legacy));
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int error_code = errno;
|
||||||
|
(void)error_code;
|
||||||
|
int x = 0;
|
||||||
|
(void)x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: fill from xsave legacy
|
// rjf: fill from xsave legacy
|
||||||
@@ -909,7 +933,7 @@ dmn_ctrl_exclusive_access_end(void)
|
|||||||
{
|
{
|
||||||
OS_MutexScope(dmn_lnx_state->access_mutex)
|
OS_MutexScope(dmn_lnx_state->access_mutex)
|
||||||
{
|
{
|
||||||
dmn_lnx_state->access_run_state = 1;
|
dmn_lnx_state->access_run_state = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user