#pragma once #include #include #include "list.h" struct breakpoint { LINKEDLIST; unsigned long address; unsigned long text; int installed; int hits; unsigned long stack; pid_t tid; int enabled; }; struct map { LINKEDLIST; unsigned long start; unsigned long end; void *data; }; struct state { LINKEDLIST; struct user_regs_struct regs; struct user_fpregs_struct fpregs; struct list maps; }; struct process { LINKEDLIST; pid_t id; int child; struct list threads; struct list breakpoints; }; struct thread { LINKEDLIST; struct process *proc; struct list states; struct state *state; int clearstates; pid_t id; int stopped; int signal; int cont; const char *status; }; //extern struct list global_processes; //extern struct thread *global_thread; extern void add_breakpoint(struct process *proc, unsigned long address, unsigned long stack, pid_t tid, int enabled); extern int is_breakpoint(struct process *proc, unsigned long address); extern struct process *dbg_attach(pid_t pid, int child); extern int dbg_detach(struct process *proc); extern int dbg_wait(struct thread *th, int recursion); extern int dbg_intr(struct thread *th); extern int dbg_cont(struct thread *th, int cont); extern int dbg_realcont(struct thread *th); extern int dbg_step(struct thread *th, int stepover); extern int dbg_pets(struct thread *th); extern void *deref(struct thread *th, unsigned long address, size_t size);