Debugger

6
Debugger

Transcript of Debugger

Page 1: Debugger

Debugger

Page 2: Debugger

Code first - target_process

int main(int argc, char *argv[]){

int a = 0;

while( a == 0 ){

printf("%p\n", &a);

printf("%d\n", a);

sleep(2);

}

printf("%s\n", "OUT!");

return 0;

};

Page 3: Debugger

Code first - debugger sprintf(name, "/proc/%.10s/mem", argv[1]);

if ((fd = open(name, O_WRONLY)) < 0) {

fprintf(stderr, "Can't access pid %s", argv[1]);

perror(":");

return 1;}

lseek(fd, strtol(argv[2], 0, 0), SEEK_SET);

if (write(fd, argv[3], strlen(argv[3])) < 0){

perror(“write");}

Page 4: Debugger

shell• gcc target_process.c -o target_process &&

./target_process

• ps aux | grep target_process

• gcc debugger.c -o debugger

• sudo ./debugger [pid_of_target_process] [visual_address_of_target_variable] [value to change to ]

Page 5: Debugger

Break the while loopint main(int argc, char *argv[]){

int a = 0;

while( a == 0 ){

printf("%p\n", &a);

printf("%d\n", a);

sleep(2);

}

printf("%s\n", "OUT!");

return 0;

};

Page 6: Debugger

Detail on debugger sprintf(name, "/proc/%.10s/mem", argv[1]);

if ((fd = open(name, O_WRONLY)) < 0) {

fprintf(stderr, "Can't access pid %s", argv[1]);

perror(":");

return 1;}

lseek(fd, strtol(argv[2], 0, 0), SEEK_SET);

if (write(fd, argv[3], strlen(argv[3])) < 0){

perror(“write");}