mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-06 23:46:15 +00:00
first commit
This commit is contained in:
commit
0b589c7986
4
01_day/backtrace/backtrace.h
Normal file
4
01_day/backtrace/backtrace.h
Normal file
@ -0,0 +1,4 @@
|
||||
#include <execinfo.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
void print_gnu_backtrace(void);
|
21
01_day/backtrace/backtrace_1.c
Normal file
21
01_day/backtrace/backtrace_1.c
Normal file
@ -0,0 +1,21 @@
|
||||
#include <execinfo.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
void print_gnu_backtrace(void)
|
||||
{
|
||||
void * frame_addrs[16];
|
||||
char** frame_strings;
|
||||
size_t backtrace_size;
|
||||
int i;
|
||||
|
||||
backtrace_size = backtrace( frame_addrs, 16 );
|
||||
frame_strings = backtrace_symbols( frame_addrs, backtrace_size );
|
||||
|
||||
for( i=0; i<backtrace_size; ++i )
|
||||
{
|
||||
printf("%d: [0x%p] %s\n", i, frame_addrs[i], frame_strings[i] );
|
||||
}
|
||||
free( frame_strings );
|
||||
}
|
||||
|
17
01_day/backtrace/backtrace_2.c
Normal file
17
01_day/backtrace/backtrace_2.c
Normal file
@ -0,0 +1,17 @@
|
||||
#include <stdio.h>
|
||||
|
||||
typedef struct layout
|
||||
{
|
||||
struct layout* ebp;
|
||||
void* ret;
|
||||
} layout;
|
||||
|
||||
void print_gnu_backtrace()
|
||||
{
|
||||
layout* ebp = __builtin_frame_address(0);
|
||||
while( ebp )
|
||||
{
|
||||
printf("0x%08x\n", (unsigned int)ebp->ret );
|
||||
ebp = ebp->ebp;
|
||||
}
|
||||
}
|
23
01_day/backtrace/backtrace_3.c
Normal file
23
01_day/backtrace/backtrace_3.c
Normal file
@ -0,0 +1,23 @@
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
void **getEBP(int dummy)
|
||||
{
|
||||
void **ebp = (void**)&dummy - 2 ;
|
||||
return (ebp);
|
||||
}
|
||||
void **save_ebp;
|
||||
void print_gnu_backtrace(void)
|
||||
{
|
||||
int dummy;
|
||||
void **ebp = getEBP(dummy);
|
||||
void **ret = *(ebp + 1);
|
||||
ebp = *ebp;
|
||||
while(ebp)
|
||||
{
|
||||
printf("%p\n", ret );
|
||||
ret = *(ebp + 1);
|
||||
ebp = *ebp;
|
||||
}
|
||||
}
|
29
01_day/backtrace/backtrace_4.c
Normal file
29
01_day/backtrace/backtrace_4.c
Normal file
@ -0,0 +1,29 @@
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
void **getEBP(int dummy)
|
||||
{
|
||||
void **ebp = (void**)&dummy - 2 ;
|
||||
return ebp;
|
||||
}
|
||||
|
||||
void print_gnu_backtrace(void)
|
||||
{
|
||||
int dummy;
|
||||
int frame = 0;
|
||||
Dl_info dlip;
|
||||
void **ebp = getEBP(dummy);
|
||||
void **ret = *(ebp+1);
|
||||
ebp = *ebp;
|
||||
printf("Stack backtrace_3:\n");
|
||||
|
||||
while(ebp)
|
||||
{
|
||||
if( dladdr(ret, &dlip) == 0 )
|
||||
break;
|
||||
printf("Frame %d : [ebp=%p] [ret=%p] %s\n", frame++, ebp, ret, dlip.dli_sname );
|
||||
ret = *(ebp + 1);
|
||||
ebp = *ebp;
|
||||
}
|
||||
}
|
24
01_day/backtrace/backtrace_5.c
Normal file
24
01_day/backtrace/backtrace_5.c
Normal file
@ -0,0 +1,24 @@
|
||||
#define UNW_LOCAL_ONLY
|
||||
#define _GNU_SOURCE
|
||||
#include <libunwind.h>
|
||||
#include <dlfcn.h>
|
||||
#include "backtrace.h"
|
||||
|
||||
void print_gnu_backtrace (void) {
|
||||
unw_word_t ip, sp;
|
||||
unw_cursor_t cursor; unw_context_t uc;
|
||||
Dl_info dlip;
|
||||
int frame=0;
|
||||
|
||||
unw_getcontext(&uc);
|
||||
unw_init_local(&cursor, &uc);
|
||||
while (unw_step(&cursor) > 0) {
|
||||
unw_get_reg(&cursor, UNW_REG_IP, &ip);
|
||||
unw_get_reg(&cursor, UNW_REG_SP, &sp);
|
||||
if( dladdr((void*)ip, &dlip) == 0 )
|
||||
break;
|
||||
printf("Frame %d : [ebp=%p] [ret=%p] %s\n", frame++,
|
||||
(void*)sp, (void*)ip, dlip.dli_sname );
|
||||
}
|
||||
}
|
||||
|
24
01_day/backtrace/backtrace_6.c
Normal file
24
01_day/backtrace/backtrace_6.c
Normal file
@ -0,0 +1,24 @@
|
||||
#define UNW_LOCAL_ONLY
|
||||
#include <libunwind.h>
|
||||
#include "backtrace.h"
|
||||
|
||||
void print_gnu_backtrace()
|
||||
{
|
||||
unw_cursor_t cursor;
|
||||
unw_context_t context;
|
||||
|
||||
unw_getcontext(&context);
|
||||
unw_init_local(&cursor, &context);
|
||||
|
||||
while (unw_step(&cursor) > 0) {
|
||||
unw_word_t offset, pc;
|
||||
char fname[64];
|
||||
|
||||
unw_get_reg(&cursor, UNW_REG_IP, &pc);
|
||||
|
||||
fname[0] = '\0';
|
||||
(void) unw_get_proc_name(&cursor, fname, sizeof(fname), &offset);
|
||||
|
||||
printf ("%p : (%s+0x%x) [%p]\n", (void*)pc, fname, offset, (void*)pc);
|
||||
}
|
||||
}
|
27
01_day/backtrace/backtrace_main.c
Normal file
27
01_day/backtrace/backtrace_main.c
Normal file
@ -0,0 +1,27 @@
|
||||
#include "backtrace.h"
|
||||
int foo(void)
|
||||
{
|
||||
print_gnu_backtrace();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bar(void)
|
||||
{
|
||||
foo();
|
||||
return 0;
|
||||
}
|
||||
int boo(void)
|
||||
{
|
||||
bar();
|
||||
return 0;
|
||||
}
|
||||
int baz(void)
|
||||
{
|
||||
boo();
|
||||
return 0;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
baz();
|
||||
return 0;
|
||||
}
|
1
01_day/backtrace/libunwind
Submodule
1
01_day/backtrace/libunwind
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 8afc33ce9f20538f048838e18680c120867ee0d2
|
BIN
01_day/corefile/a.out
Executable file
BIN
01_day/corefile/a.out
Executable file
Binary file not shown.
BIN
01_day/corefile/core
Normal file
BIN
01_day/corefile/core
Normal file
Binary file not shown.
82
01_day/corefile/readcore.c
Normal file
82
01_day/corefile/readcore.c
Normal file
@ -0,0 +1,82 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <elf.h>
|
||||
#include <sys/procfs.h>
|
||||
#include <asm/ldt.h>
|
||||
|
||||
static void * read_note(void *addr, void **pdata)
|
||||
{
|
||||
#define ALIGN(pos, size) ((((pos) + (size-1)) / size) * size)
|
||||
|
||||
Elf32_Nhdr *note_hdr = addr;
|
||||
|
||||
/* print note name and type */
|
||||
printf("note: %-8s (0x%03x)\n", (char *)(note_hdr+1), note_hdr->n_type);
|
||||
|
||||
/* calculate data position */
|
||||
*pdata = (void *) ((unsigned long) (note_hdr+1) + ALIGN(note_hdr->n_namesz, 4));
|
||||
|
||||
/* return pointer of next note header */
|
||||
return (void *) ((unsigned long) *pdata + ALIGN(note_hdr->n_descsz, 4));
|
||||
}
|
||||
int main(void)
|
||||
{
|
||||
prstatus_t *status;
|
||||
prpsinfo_t *psinfo;
|
||||
struct elf_siginfo *siginfo;
|
||||
Elf32_auxv_t *auxv;
|
||||
struct user_desc *ldt;
|
||||
void *files;
|
||||
|
||||
FILE *fp;
|
||||
Elf32_Ehdr elf_hdr;
|
||||
Elf32_Phdr pgrm_hdr;
|
||||
char buf[4096];
|
||||
void *note;
|
||||
|
||||
fp = fopen("core", "r");
|
||||
|
||||
/* read ELF header */
|
||||
fread(&elf_hdr, sizeof(elf_hdr), 1, fp);
|
||||
|
||||
/* seek to first program header (for NOTE) */
|
||||
fseek(fp, elf_hdr.e_phoff, SEEK_SET);
|
||||
|
||||
/* read program header */
|
||||
fread(&pgrm_hdr, sizeof(pgrm_hdr), 1, fp);
|
||||
|
||||
/* seek to note */
|
||||
fseek(fp, pgrm_hdr.p_offset, SEEK_SET);
|
||||
fread(buf, pgrm_hdr.p_filesz, 1, fp);
|
||||
|
||||
note = buf;
|
||||
note = read_note(note, (void **) &status);
|
||||
note = read_note(note, (void **) &psinfo);
|
||||
note = read_note(note, (void **) &siginfo);
|
||||
note = read_note(note, (void **) &auxv);
|
||||
note = read_note(note, (void **) &files);
|
||||
note = read_note(note, (void **) &ldt);
|
||||
|
||||
#define EAX 6
|
||||
#define EIP 12
|
||||
|
||||
printf("program name = %s\n", psinfo->pr_fname);
|
||||
printf("signo = %d\n", status->pr_info.si_signo);
|
||||
printf("EIP = 0x%08lx\nEAX = 0x%08lx\n", status->pr_reg[EIP], status->pr_reg[EAX]);
|
||||
|
||||
/* print auxiliary vector */
|
||||
for ( ; auxv->a_type != AT_NULL; auxv++) {
|
||||
if (auxv->a_type == AT_BASE)
|
||||
printf("address of dynamic loader: %p\n", (void *) auxv->a_un.a_val);
|
||||
if (auxv->a_type == AT_SYSINFO_EHDR)
|
||||
printf("address of vdso: %p\n", (void *) auxv->a_un.a_val);
|
||||
}
|
||||
|
||||
printf("gdt entry: %u, base: 0x%08x, limit: 0x%08lx\n",
|
||||
ldt->entry_number, ldt->base_addr & ~0xfff,
|
||||
ldt->limit_in_pages ? ldt->limit * PAGE_SIZE : ldt->limit);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
9
01_day/corefile/segfault.c
Normal file
9
01_day/corefile/segfault.c
Normal file
@ -0,0 +1,9 @@
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
getchar();
|
||||
*(int *) 0 = 1;
|
||||
return 0;
|
||||
}
|
BIN
01_day/stack/a.out
Executable file
BIN
01_day/stack/a.out
Executable file
Binary file not shown.
17
01_day/stack/stack.c
Normal file
17
01_day/stack/stack.c
Normal file
@ -0,0 +1,17 @@
|
||||
#include <stdio.h>
|
||||
void bar(int a)
|
||||
{
|
||||
printf("bar(), &a=%p\n", &a);
|
||||
}
|
||||
void foo()
|
||||
{
|
||||
bar(1);
|
||||
// printf("foo()\n");
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
//printf("main()\n");
|
||||
return 0;
|
||||
}
|
BIN
02_day/ptrace/a.out
Executable file
BIN
02_day/ptrace/a.out
Executable file
Binary file not shown.
65
02_day/ptrace/euidfake.c
Normal file
65
02_day/ptrace/euidfake.c
Normal file
@ -0,0 +1,65 @@
|
||||
#include <stdio.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/user.h> // or linux/user.h (contains user_regs_struct)
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
void dump_reg(int pid, struct user_regs_struct *regs)
|
||||
{
|
||||
if(ptrace(PTRACE_GETREGS, pid, 0, regs)) {
|
||||
perror("PTRACE_GETREGS");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
printf("-------- DUMP OF REGISTERS --------\n");
|
||||
printf("stack ebp = %#x\n", regs->ebp);
|
||||
printf("stack esp = %#x\n", regs->esp);
|
||||
printf("orig_eax = %#x\n", regs->orig_eax);
|
||||
printf("eax = %#x\n", regs->eax);
|
||||
printf("ebx = %#x\n", regs->ebx);
|
||||
printf("ecx = %#x\n", regs->ecx);
|
||||
printf("edx = %#x\n", regs->edx);
|
||||
printf("eip = %#x\n", regs->eip);
|
||||
printf("------------------------------------\n");
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int pid, status;
|
||||
struct user_regs_struct regs;
|
||||
|
||||
if(!(pid = fork())) {
|
||||
ptrace(PTRACE_TRACEME, 0, 0, 0); // tracebit set
|
||||
execl( "./geteuid" , "./geteuid" , NULL );
|
||||
return 0;
|
||||
}
|
||||
// child process stand by
|
||||
|
||||
while(1) {
|
||||
wait(&status);
|
||||
if(WIFEXITED(status)) {
|
||||
fprintf(stderr, "child has already exited\n");
|
||||
break;
|
||||
}
|
||||
if(WIFSIGNALED(status)) {
|
||||
fprintf(stderr, "child process %d was abnormal exit.\n", pid);
|
||||
break;
|
||||
}
|
||||
|
||||
// dump general purpose registers
|
||||
dump_reg(pid, ®s);
|
||||
if(regs.orig_eax == 0xc9 && regs.eax == geteuid()) {
|
||||
printf("You'll call geteuid() hereafter\n");
|
||||
ptrace(PTRACE_POKEUSR, pid, EAX*4, 0);
|
||||
printf("EAX has been modified by ptrace()\n");
|
||||
dump_reg(pid, ®s);
|
||||
ptrace(PTRACE_CONT, pid, 0, 0);
|
||||
break;
|
||||
}
|
||||
// trace until syscall
|
||||
ptrace(PTRACE_SYSCALL, pid, 0, 0);
|
||||
}
|
||||
|
||||
// End of while loop -> child process has exited already.
|
||||
}
|
BIN
02_day/ptrace/geteuid
Executable file
BIN
02_day/ptrace/geteuid
Executable file
Binary file not shown.
19
02_day/ptrace/geteuid.c
Normal file
19
02_day/ptrace/geteuid.c
Normal file
@ -0,0 +1,19 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
int main()
|
||||
{
|
||||
char *passwd = "criminal is a gold broker";
|
||||
int euid;
|
||||
euid = geteuid();
|
||||
|
||||
if(euid == 0) { // root
|
||||
printf("You Are Operator!\n");
|
||||
printf("Password is %s\n", passwd);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
printf("You are just a user %d\n", euid);
|
||||
return 0;
|
||||
}
|
BIN
02_day/ptrace/hello
Executable file
BIN
02_day/ptrace/hello
Executable file
Binary file not shown.
12
02_day/ptrace/hello.c
Normal file
12
02_day/ptrace/hello.c
Normal file
@ -0,0 +1,12 @@
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
int main()
|
||||
{
|
||||
char str[] = "hello!";
|
||||
while(1)
|
||||
{
|
||||
printf("%s\n", str);
|
||||
sleep(1);
|
||||
}
|
||||
}
|
||||
|
54
02_day/ptrace/procmem.c
Normal file
54
02_day/ptrace/procmem.c
Normal file
@ -0,0 +1,54 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
void dump_region(int fd, long start, long end)
|
||||
{
|
||||
char buf[4096];
|
||||
|
||||
lseek64(fd, start, SEEK_SET);
|
||||
while(start < end) {
|
||||
int rd;
|
||||
|
||||
rd = read(fd, buf, 4096);
|
||||
write(STDOUT_FILENO, buf, rd);
|
||||
start += 4096;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
FILE *maps;
|
||||
int mem;
|
||||
pid_t pid;
|
||||
char path[BUFSIZ];
|
||||
if(argc < 2) {
|
||||
fprintf(stderr, "usage: %s pid\n", argv[0]);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
pid = strtol(argv[1], NULL, 10);
|
||||
if(ptrace(PTRACE_ATTACH, pid, NULL, NULL) == -1) {
|
||||
perror("ptrace");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
snprintf(path, sizeof(path), "/proc/%d/maps", pid);
|
||||
maps = fopen(path, "r");
|
||||
snprintf(path, sizeof(path), "/proc/%d/mem", pid);
|
||||
mem = open(path, O_RDONLY);
|
||||
if(maps && mem != -1) {
|
||||
char buf[BUFSIZ + 1];
|
||||
while(fgets(buf, BUFSIZ, maps)) {
|
||||
long start, end;
|
||||
sscanf(buf, "%llx-%llx", &start, &end);
|
||||
dump_region(mem, start, end);
|
||||
}
|
||||
}
|
||||
ptrace(PTRACE_DETACH, pid, NULL, NULL);
|
||||
if(mem != -1)
|
||||
close(mem);
|
||||
if(maps)
|
||||
fclose(maps);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
21
02_day/ptrace/ptrace.c
Normal file
21
02_day/ptrace/ptrace.c
Normal file
@ -0,0 +1,21 @@
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/user.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
struct user_regs_struct regs;
|
||||
|
||||
int ret, pid, i;
|
||||
|
||||
pid = atoi(argv[1]);
|
||||
|
||||
ret = ptrace(PTRACE_ATTACH, pid, 0, 0);
|
||||
|
||||
printf("return : %d\n", ret);
|
||||
|
||||
ptrace(PTRACE_DETACH, pid, 0, 0);
|
||||
}
|
||||
|
28
02_day/ptrace/ptrace_1.c
Normal file
28
02_day/ptrace/ptrace_1.c
Normal file
@ -0,0 +1,28 @@
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/user.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
struct user_regs_struct regs;
|
||||
int ret, pid;
|
||||
|
||||
pid = atoi(argv[1]);
|
||||
|
||||
|
||||
ret = ptrace(PTRACE_ATTACH, pid, 0, 0);
|
||||
|
||||
printf("return : %d\n", ret);
|
||||
|
||||
|
||||
ptrace(PTRACE_GETREGS, pid, 0, regs);
|
||||
|
||||
// 스택 주소 출력
|
||||
printf("stack = %p\n", (void*)regs.esp);
|
||||
|
||||
|
||||
ptrace(PTRACE_DETACH, pid, 0, 0);
|
||||
}
|
||||
|
27
02_day/ptrace/ptrace_2.c
Normal file
27
02_day/ptrace/ptrace_2.c
Normal file
@ -0,0 +1,27 @@
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/user.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
struct user_regs_struct regs;
|
||||
int ret, pid, i;
|
||||
unsigned int data;
|
||||
pid = atoi(argv[1]);
|
||||
|
||||
ret = ptrace(PTRACE_ATTACH, pid, 0, 0);
|
||||
printf("return : %d\n", ret);
|
||||
|
||||
ptrace(PTRACE_GETREGS, pid, 0, regs);
|
||||
printf("stack = %p\n", (void*)regs.esp);
|
||||
|
||||
for(i=0; i<10; i++)
|
||||
{
|
||||
data = ptrace(PTRACE_PEEKDATA, pid, regs.esp+i*4, 0);
|
||||
printf("%08x\n", data);
|
||||
}
|
||||
|
||||
ptrace(PTRACE_DETACH, pid, 0, 0);
|
||||
}
|
36
02_day/ptrace/ptrace_3.c
Normal file
36
02_day/ptrace/ptrace_3.c
Normal file
@ -0,0 +1,36 @@
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/user.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
struct user_regs_struct regs;
|
||||
int ret, pid, i, j;
|
||||
unsigned int data;
|
||||
unsigned char data2[4];
|
||||
|
||||
pid = atoi(argv[1]);
|
||||
|
||||
ret = ptrace(PTRACE_ATTACH, pid, 0, 0);
|
||||
printf("return : %d\n", ret);
|
||||
|
||||
ptrace(PTRACE_GETREGS, pid, 0, ®s);
|
||||
printf("stack = %p\n", (void*)regs.esp);
|
||||
|
||||
for(i=0; i<300; i++)
|
||||
{
|
||||
data = ptrace(PTRACE_PEEKDATA, pid, regs.esp+i*4, 0);
|
||||
memcpy(&data2, &data, 4);
|
||||
for(j=0; j<4; j++){
|
||||
if(isprint(data2[j]))
|
||||
printf("%c ", data2[j]);
|
||||
else
|
||||
printf(". ");
|
||||
}
|
||||
}
|
||||
ptrace(PTRACE_DETACH, pid, 0, 0);
|
||||
}
|
||||
|
38
02_day/ptrace/ptrace_4.c
Normal file
38
02_day/ptrace/ptrace_4.c
Normal file
@ -0,0 +1,38 @@
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/user.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
struct user_regs_struct regs;
|
||||
int ret, pid, i, j;
|
||||
unsigned int data;
|
||||
unsigned char data2[4];
|
||||
|
||||
pid = atoi(argv[1]);
|
||||
|
||||
ret = ptrace(PTRACE_ATTACH, pid, 0, 0);
|
||||
printf("return : %d\n", ret);
|
||||
|
||||
ptrace(PTRACE_GETREGS, pid, 0, ®s);
|
||||
printf("stack = %p\n", (void*)regs.esp);
|
||||
|
||||
for(i=0; i<300; i++)
|
||||
{
|
||||
data = ptrace(PTRACE_PEEKDATA, pid, regs.esp+i*4, 0);
|
||||
memcpy(&data2, &data, 4);
|
||||
printf("%08x : ", (unsigned int)regs.esp+i*4);
|
||||
for(j=0; j<4; j++){
|
||||
if(isprint(data2[j]))
|
||||
printf("%c ", data2[j]);
|
||||
else
|
||||
printf(". ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
ptrace(PTRACE_DETACH, pid, 0, 0);
|
||||
}
|
||||
|
40
02_day/ptrace/ptrace_5.c
Normal file
40
02_day/ptrace/ptrace_5.c
Normal file
@ -0,0 +1,40 @@
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/user.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
struct user_regs_struct regs;
|
||||
int ret, pid, i, j;
|
||||
unsigned int data;
|
||||
unsigned char data2[4];
|
||||
|
||||
pid = atoi(argv[1]);
|
||||
ret = ptrace(PTRACE_ATTACH, pid, 0, 0);
|
||||
printf("return : %d\n", ret);
|
||||
|
||||
ptrace(PTRACE_GETREGS, pid, 0, ®s);
|
||||
printf("stack = %p\n", (void*)regs.esp);
|
||||
|
||||
for(i=0; i<300; i++)
|
||||
{
|
||||
data = ptrace(PTRACE_PEEKDATA, pid, regs.esp+i*4, 0);
|
||||
memcpy(&data2, &data, 4);
|
||||
printf("%08x : ", (unsigned int)regs.esp+i*4);
|
||||
|
||||
for(j=0; j<4; j++){
|
||||
if(isprint(data2[j]))
|
||||
printf("%c ", data2[j]);
|
||||
else
|
||||
printf(". ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
ptrace(PTRACE_POKEDATA, pid, 0xbf8b7f65, 0x41414141);
|
||||
ptrace(PTRACE_DETACH, pid, 0, 0);
|
||||
}
|
||||
|
||||
|
14
02_day/valgrind/test_1.c
Normal file
14
02_day/valgrind/test_1.c
Normal file
@ -0,0 +1,14 @@
|
||||
#include <string.h>
|
||||
static void *rrr;
|
||||
static void **p_rrr;
|
||||
|
||||
static void foo(void)
|
||||
{
|
||||
rrr = strdup("bbb");
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
return 0;
|
||||
}
|
17
02_day/valgrind/test_2.c
Normal file
17
02_day/valgrind/test_2.c
Normal file
@ -0,0 +1,17 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
static void *rrr;
|
||||
static void **p_rrr;
|
||||
|
||||
static void foo(void)
|
||||
{
|
||||
p_rrr = malloc(sizeof(void **));
|
||||
|
||||
*p_rrr = strdup("bbb");
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
return 0;
|
||||
}
|
16
02_day/valgrind/test_3.c
Normal file
16
02_day/valgrind/test_3.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
static void *rrr;
|
||||
static void **p_rrr;
|
||||
|
||||
static void foo(void)
|
||||
{
|
||||
rrr = strdup("bbb");
|
||||
rrr = NULL;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
return 0;
|
||||
}
|
17
02_day/valgrind/test_4.c
Normal file
17
02_day/valgrind/test_4.c
Normal file
@ -0,0 +1,17 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
static void *rrr;
|
||||
static void **p_rrr;
|
||||
|
||||
static void foo(void)
|
||||
{
|
||||
p_rrr = malloc(sizeof(void **));
|
||||
*p_rrr = strdup("bbb");
|
||||
p_rrr = NULL;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
return 0;
|
||||
}
|
16
02_day/valgrind/test_5.c
Normal file
16
02_day/valgrind/test_5.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
static void *rrr;
|
||||
static void **p_rrr;
|
||||
|
||||
static void foo(void)
|
||||
{
|
||||
rrr = strdup("bbb");
|
||||
rrr = ((char *)rrr)+1;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
return 0;
|
||||
}
|
17
02_day/valgrind/test_6.c
Normal file
17
02_day/valgrind/test_6.c
Normal file
@ -0,0 +1,17 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
static void *rrr;
|
||||
static void **p_rrr;
|
||||
|
||||
static void foo(void)
|
||||
{
|
||||
p_rrr = malloc(sizeof(void **));
|
||||
*p_rrr = strdup("bbb");
|
||||
*p_rrr = ((char *)(*p_rrr))+1;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
return 0;
|
||||
}
|
17
02_day/valgrind/test_7.c
Normal file
17
02_day/valgrind/test_7.c
Normal file
@ -0,0 +1,17 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
static void *rrr;
|
||||
static void **p_rrr;
|
||||
|
||||
static void foo(void)
|
||||
{
|
||||
p_rrr = malloc(sizeof(void **));
|
||||
*p_rrr = strdup("bbb");
|
||||
p_rrr = (void **)((char *)p_rrr + 1);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
return 0;
|
||||
}
|
19
02_day/valgrind/test_8.c
Normal file
19
02_day/valgrind/test_8.c
Normal file
@ -0,0 +1,19 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
static void *rrr;
|
||||
static void **p_rrr;
|
||||
|
||||
static void foo(void)
|
||||
{
|
||||
p_rrr = malloc(sizeof(void **));
|
||||
|
||||
*p_rrr = strdup("bbb");
|
||||
*p_rrr = ((char *)(*p_rrr))+1;
|
||||
p_rrr = (void **)(((char *)(p_rrr))+1);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
return 0;
|
||||
}
|
18
02_day/valgrind/test_9.c
Normal file
18
02_day/valgrind/test_9.c
Normal file
@ -0,0 +1,18 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
static void *rrr;
|
||||
static void **p_rrr;
|
||||
|
||||
static void foo(void)
|
||||
{
|
||||
p_rrr = malloc(sizeof(void **));
|
||||
*p_rrr = strdup("bbb");
|
||||
*p_rrr = ((char *)(*p_rrr)+1);
|
||||
p_rrr = NULL;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
foo();
|
||||
return 0;
|
||||
}
|
BIN
02_day/valgrind/valgrind-3.11.0.tar.bz2
Normal file
BIN
02_day/valgrind/valgrind-3.11.0.tar.bz2
Normal file
Binary file not shown.
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/32bit-core-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/32bit-core-valgrind-s2.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/32bit-core.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/32bit-core.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/32bit-core.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/32bit-linux-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/32bit-linux-valgrind-s2.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/32bit-linux.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/32bit-linux.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/32bit-linux.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/32bit-sse-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/32bit-sse-valgrind-s2.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/32bit-sse.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/32bit-sse.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/32bit-sse.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/64bit-avx-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/64bit-avx-valgrind-s2.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/64bit-avx.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/64bit-avx.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/64bit-avx.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/64bit-core-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/64bit-core-valgrind-s2.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/64bit-core.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/64bit-core.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/64bit-core.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/64bit-linux-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/64bit-linux-valgrind-s2.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/64bit-linux.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/64bit-linux.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/64bit-linux.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/64bit-sse-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/64bit-sse-valgrind-s2.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/64bit-sse.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/64bit-sse.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/64bit-sse.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/amd64-avx-coresse-valgrind.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/amd64-avx-coresse.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/amd64-avx-coresse.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/amd64-avx-coresse.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/amd64-avx-linux-valgrind.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/amd64-avx-linux.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/amd64-avx-linux.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/amd64-avx-linux.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/amd64-coresse-valgrind.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/amd64-linux-valgrind.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/arm-core-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/arm-core-valgrind-s2.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/arm-core.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/arm-core.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/arm-core.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/arm-vfpv3-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/arm-vfpv3-valgrind-s2.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/arm-vfpv3.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/arm-vfpv3.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/arm-vfpv3.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/arm-with-vfpv3-valgrind.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/arm-with-vfpv3.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/arm-with-vfpv3.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/arm-with-vfpv3.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/cachegrind-x86-linux
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/cachegrind-x86-linux
Symbolic link
@ -0,0 +1 @@
|
||||
../cachegrind/cachegrind-x86-linux
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/callgrind-x86-linux
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/callgrind-x86-linux
Symbolic link
@ -0,0 +1 @@
|
||||
../callgrind/callgrind-x86-linux
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/default.supp
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/default.supp
Symbolic link
@ -0,0 +1 @@
|
||||
../default.supp
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/drd-x86-linux
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/drd-x86-linux
Symbolic link
@ -0,0 +1 @@
|
||||
../drd/drd-x86-linux
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/exp-bbv-x86-linux
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/exp-bbv-x86-linux
Symbolic link
@ -0,0 +1 @@
|
||||
../exp-bbv/exp-bbv-x86-linux
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/exp-dhat-x86-linux
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/exp-dhat-x86-linux
Symbolic link
@ -0,0 +1 @@
|
||||
../exp-dhat/exp-dhat-x86-linux
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/exp-sgcheck-x86-linux
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/exp-sgcheck-x86-linux
Symbolic link
@ -0,0 +1 @@
|
||||
../exp-sgcheck/exp-sgcheck-x86-linux
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/getoff-x86-linux
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/getoff-x86-linux
Symbolic link
@ -0,0 +1 @@
|
||||
../auxprogs/getoff-x86-linux
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/helgrind-x86-linux
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/helgrind-x86-linux
Symbolic link
@ -0,0 +1 @@
|
||||
../helgrind/helgrind-x86-linux
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/i386-coresse-valgrind.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/i386-linux-valgrind.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/lackey-x86-linux
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/lackey-x86-linux
Symbolic link
@ -0,0 +1 @@
|
||||
../lackey/lackey-x86-linux
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/massif-x86-linux
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/massif-x86-linux
Symbolic link
@ -0,0 +1 @@
|
||||
../massif/massif-x86-linux
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/memcheck-x86-linux
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/memcheck-x86-linux
Symbolic link
@ -0,0 +1 @@
|
||||
../memcheck/memcheck-x86-linux
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips-cp0-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips-cp0-valgrind-s2.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/mips-cp0.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/mips-cp0.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips-cp0.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips-cpu-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips-cpu-valgrind-s2.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/mips-cpu.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/mips-cpu.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips-cpu.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips-fpu-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips-fpu-valgrind-s2.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/mips-fpu.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/mips-fpu.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips-fpu.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips-linux-valgrind.xml
|
1
02_day/valgrind/valgrind-3.11.0/.in_place/mips-linux.xml
Symbolic link
1
02_day/valgrind/valgrind-3.11.0/.in_place/mips-linux.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips-linux.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips64-cp0-valgrind-s1.xml
|
@ -0,0 +1 @@
|
||||
../coregrind/m_gdbserver/mips64-cp0-valgrind-s2.xml
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user