dhclient -> IP 잡아주기
gdb (파일이름)
gdb -q (파일이름)
gdb 나가기
q
disassemble main
Intel 변환
set dis intel
브레이크 걸기
b *main
b *main+1
b *main+3
브레이크 정보확인
info breakpoints
브레이크 포인트 삭제
d
d 1 -> 1번 브레이크포인트 삭제
프로그램 실행
run
-> breakpoint 에서 멈춤
현재 레지스터 확인
info registers
다음 실행 -> run 을 한 상태에서만 사용 가능
continue
특정 주소의 값을 확인
x/s 0x00000111 -> 문자열 확인
x/s $ebp-4 -> $사용
-> 해당 라인 다음줄에 breakpoint를 먼저 걸어줘야 값을 확인 할 수 있음
x/x ... -> 16진수로 확인
x/d ... -> 10진수로 확인
----------------
#include <stdio.h>
int main(){
int a=1;
int b=2;
printf("sum : %d\n", a+b);
return 0;
}
분석
0x08048328 <main+0>: push ebp
0x08048329 <main+1>: mov ebp,esp
--------------------------------------------------
0x0804832b <main+3>: sub esp,0x8
0x0804832e <main+6>: and esp,0xfffffff0 무시할 수 있는 영역
0x08048331 <main+9>: mov eax,0x0
--------------------------------------------------
0x08048336 <main+14>: sub esp,eax
0x08048338 <main+16>: mov DWORD PTR [ebp-4],0x1 // a=1;
0x0804833f <main+23>: mov DWORD PTR [ebp-8],0x2 //b=2
0x08048346 <main+30>: sub esp,0x8 // 쓰레기값으로 패워지는 8byte, 빈공간
0x08048349 <main+33>: mov eax,DWORD PTR [ebp-8]
0x0804834c <main+36>: add eax,DWORD PTR [ebp-4]
0x0804834f <main+39>: push eax //a+b
0x08048350 <main+40>: push 0x8048410
0x08048355 <main+45>: call 0x8048268 <printf> //printf("%d\n",a+b);
--------------------------------------------------
0x0804835a <main+50>: add esp,0x10
0x0804835d <main+53>: mov eax,0x0
0x08048362 <main+58>: leave
0x08048363 <main+59>: ret
End of assembler dump.
연습문제
wget http://mkgk888.cafe24.com/bof/number
'System ' 카테고리의 다른 글
nop BOF (0) | 2014.10.01 |
---|---|
basic start of BOF (0) | 2014.09.30 |
knowledge of memory structure (0) | 2014.09.26 |
war (0) | 2014.09.01 |
race condition (0) | 2014.08.29 |