Fix breakpoints

This commit is contained in:
2025-03-10 09:38:03 +01:00
parent c39b54d0d7
commit 31f6fa1cc1
3 changed files with 8 additions and 17 deletions

View File

@@ -3,7 +3,7 @@
log_inf("Loading user init script for program ./test"); log_inf("Loading user init script for program ./test");
log_err("Test error message"); log_err("Test error message");
var offset = "0x0000000000001145"; // objdump -d ./test var offset = "0x0000000000001169"; // dupa(), objdump -d ./test
// Testing... // Testing...
print_file(); print_file();

View File

@@ -145,7 +145,6 @@ typedef struct {
js_State *js; js_State *js;
HashTable brks; HashTable brks;
uintptr_t program_load_offset; uintptr_t program_load_offset;
bool running;
} Dbg; } Dbg;
void dbg_wait(Dbg *dbg) void dbg_wait(Dbg *dbg)
@@ -229,16 +228,10 @@ void dbg_step_brk(Dbg *dbg)
if ((brk != NULL && brk->enabled)) { if ((brk != NULL && brk->enabled)) {
uint64_t prev_instr = loc; uint64_t prev_instr = loc;
dbg_set_rip(dbg, prev_instr); dbg_set_rip(dbg, prev_instr);
brk->enabled = false; brk_disable(brk);
ptrace(PTRACE_SINGLESTEP, brk->pid, NULL, NULL); ptrace(PTRACE_SINGLESTEP, brk->pid, NULL, NULL);
dbg_wait(dbg); dbg_wait(dbg);
brk->enabled = true; brk_enable(brk);
} else {
if (!dbg->running) {
dbg->running = true;
} else {
LOG_ERR("Breakpoint 0x%"PRIxPTR" either doesn't exist or is disabled\n", loc);
}
} }
} }
@@ -274,11 +267,6 @@ void dbg_js_rm_brk_addr(js_State *js)
{ {
Dbg *dbg = getdbg(); Dbg *dbg = getdbg();
const char *addr_str = js_tostring(js, 1); const char *addr_str = js_tostring(js, 1);
/* uintptr_t addr; */
/* sscanf(addr_str, "0x%"SCNxPTR, &addr); */
/* uintptr_t full_addr = dbg->program_load_offset + addr; */
/* char addr_str2[20]; */
/* snprintf(addr_str2, sizeof(addr_str2), "0x%"PRIxPTR, full_addr); */
Brk *brk = (Brk *)hashtable_get(&dbg->brks, addr_str); Brk *brk = (Brk *)hashtable_get(&dbg->brks, addr_str);
if (brk == NULL) { if (brk == NULL) {
LOG_ERR("No breakpoint at address: %s\n", addr_str); LOG_ERR("No breakpoint at address: %s\n", addr_str);
@@ -448,8 +436,8 @@ void dbg_init_load_offset(Dbg *dbg)
} }
// We only need the first one // We only need the first one
procmaps_struct *mem_region = pmparser_next(&maps_iter); procmaps_struct *mem_region = NULL;
mem_region = pmparser_next(&maps_iter);
dbg->program_load_offset = (uintptr_t)mem_region->addr_start; dbg->program_load_offset = (uintptr_t)mem_region->addr_start;
pmparser_free(&maps_iter); pmparser_free(&maps_iter);

3
test.c
View File

@@ -1,4 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include <inttypes.h>
void dupa(void) { void dupa(void) {
printf("KSKSKKSKSKSK\n"); printf("KSKSKKSKSKSK\n");
@@ -6,6 +7,8 @@ void dupa(void) {
int main(void) int main(void)
{ {
printf("main at 0x%"PRIxPTR"\n", (uintptr_t)&main);
for (int i = 1; i <= 20; i++) { for (int i = 1; i <= 20; i++) {
printf("i = %d\n", i); printf("i = %d\n", i);
if (i % 10 == 0) { if (i % 10 == 0) {