Fix breakpoints
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
20
debugus.c
20
debugus.c
@@ -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
3
test.c
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user