Automatically load program load offset

This commit is contained in:
kamkow1
2025-03-09 17:49:38 +01:00
parent bb8eafbe32
commit 3cd61ab871
4 changed files with 436 additions and 1 deletions

View File

@@ -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);
}