Automatically load program load offset
This commit is contained in:
22
debugus.c
22
debugus.c
@@ -14,6 +14,7 @@
|
||||
#include "linenoise.h"
|
||||
#include "mujs.h"
|
||||
#include "hash.h"
|
||||
#include "pmparser.h"
|
||||
|
||||
#define LOG_ERR(fmt, ...) fprintf(stderr, "Error: " fmt, ##__VA_ARGS__)
|
||||
#define LOG_INF(fmt, ...) fprintf(stdout, "Info: " fmt, ##__VA_ARGS__)
|
||||
@@ -33,6 +34,7 @@
|
||||
|
||||
typedef struct {
|
||||
pid_t pid;
|
||||
pid_t proc_pid;
|
||||
uintptr_t addr;
|
||||
bool enabled;
|
||||
uint8_t data;
|
||||
@@ -180,12 +182,32 @@ void dbg_init_js(Dbg *dbg)
|
||||
#undef make_js_func
|
||||
}
|
||||
|
||||
void dbg_init_load_offset(Dbg *dbg)
|
||||
{
|
||||
procmaps_iterator maps_iter = {0};
|
||||
procmaps_error_t parser_err = PROCMAPS_SUCCESS;
|
||||
|
||||
parser_err = pmparser_parse(dbg->pid, &maps_iter);
|
||||
if (parser_err) {
|
||||
LOG_ERR("Failed to parse /proc/%d/maps (%d)\n", dbg->pid, (int)parser_err);
|
||||
return;
|
||||
}
|
||||
|
||||
// We only need the first one
|
||||
procmaps_struct *mem_region = pmparser_next(&maps_iter);
|
||||
|
||||
dbg->program_load_offset = (uintptr_t)mem_region->addr_start;
|
||||
|
||||
pmparser_free(&maps_iter);
|
||||
}
|
||||
|
||||
void dbg_init(Dbg *dbg, const char *file, pid_t pid)
|
||||
{
|
||||
memset(dbg, 0, sizeof(*dbg));
|
||||
dbg->file = file;
|
||||
dbg->pid = pid;
|
||||
dbg_init_js(dbg);
|
||||
dbg_init_load_offset(dbg);
|
||||
hashtable_init(&dbg->brks, MAX_BRKS);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user