A simple ptrace debugger with process attach capabilities

Let's look at a code example:

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <signal.h> #include <elf.h> #include <sys/types.h> #include <sys/user.h> #include <sys/stat.h> #include <sys/ptrace.h> #include <sys/mman.h> typedef struct handle { Elf64_Ehdr *ehdr; Elf64_Phdr *phdr; Elf64_Shdr *shdr; uint8_t *mem; char *symname; Elf64_Addr symaddr; struct user_regs_struct pt_reg; char *exec; } handle_t; int global_pid; Elf64_Addr lookup_symbol(handle_t *, const char *); char * get_exe_name(int); void sighandler(int); #define EXE_MODE 0 #define PID_MODE 1 int main(int argc, char **argv, char **envp) { int fd, c, mode ...

Get Learning Linux Binary Analysis now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.