attachargs, attachcore, attachdynamic, attachproc, proctextfile - debugging
processes and core files
int attachcore(Fhdr *hdr)
int attachproc(int pid)
char* proctextfile(int pid)
int attachargs(int argc, char **argv, int omode)
extern Fhdr* symhdr;
extern char* symfil;
extern Map* symmap;
extern Fhdr* fhdrlist;
extern Fhdr* corhdr;
extern char* corfil;
extern Map* cormap;
extern int corpid;
extern Regs* correg;
These routines provide access to the objects a typical debugger manipulates: an
executable binary, some number of shared libraries, a memory image in the form
of a core dump or active process, and a register set.
The maintained state is:
- The file header for the main binary.
- The file name of the main binary.
- The memory map of the main binary.
- A linked list (via the Fhdr.next fields) of all currently open
headers (see symopen in mach-symbol(3)). When dynamically
linked objects have been attached, they are present in this linked list,
and therefore included in searches by indexsym, lookupsym,
and findsym (see mach-symbol(3)).
- The file header for the core dump, if any.
- The file name of the core dump, if any.
- The memory map of the core dump or attached process.
- The process id of the attached process, if any.
- The register set of the core dump or attached process. If these fields are
not valid, they are zeroed.
attach to an opened core file or an
executing process. They set corhdr
, and correg
returns the name of the main binary for the process with id
requires that the memory image already be attached. It
reads the dynamic linker's internal run-time data structures and then opens
all the dynamic objects that are currently loaded.
uses all of these functions while parsing an argument vector
as would be passed to a debugger like db
(1) or acid
expects a list of executable files, core dump files, or process ids, given in
any order. If extra arguments are given (for example, more than one
executable, or both a core dump and a process id), they are ignored and
diagnostics are printed to standard error. If arguments are missing (for
example, the process id is given without an executable file),
fills them in as best it can.
The interface needs to be changed to support multiple threads, each with its own