- 먼저 작성 코드 확인
- gdb a.out 실행
- disassemble = disas 명령어 실행
여기서 % = AT&T 방식의 경우 레지스터를 %형식으로 사용
인텔 방식을 사용할 경우에는 표현 방식을 변경 해 주어야 한다.
run으로 프로그램을 시작해보면, Segmentation fault 에러 발생!!
그래서 Breakpoint를 만들어 주어야한다! 0x08048060 첫 번째 줄에 breakpoint가 걸렸다!
tip - breakpoint 할 때 b main+7 하면 오류!! 위치를 지정할 시! *main+7 이렇게 해야 한다!
현재 지금 프로그램의 문맥의 위치가 화살표로 표시되어있다! 아직 저 push 명령어 실행 전!
현재 문맥에서의 register의 값들이
다 나오게 된다!
eip - 다음 실행할 명령어를 가르킨다!
-> 여기에서는 push 가리킴!
esp - 스택의 위치!
tip) info reg $eax
-> 내가 원하는 특정 레지스터에 들어가있는 값만 보고 싶을 때
esp(start point) - > 0xbffff0a0
현재 스택이 가르키는 곳에 들어있는 데이터 값을 알고 싶을 때!
여기서
x/x <- data 값을 확인하겠다!
x/s <- string 을 확인하겠다!
x/i <- instruction을 확인하겠다!
결과가 같은 걸을 알 수 있다!
x/i 는 main 함수에 포함된 값을 보여 달라는 뜻!
1 -> 10 -> 1234678 값으로 하나씩 들어가는 것을 확인 할 있다!
pop 명령어를 통해서 stack point의 위치를 변경했다!
eax 의 값에는 12345678 값이 들어가서 값은 있지만 결국 쓰레기 값이다!
위에서 사용한 명령어 정리!
r - execute
b - breakpoint
info reg
ni - next instruction
'Reverse engineering > 리버싱 분석 강의 정리' 카테고리의 다른 글
리버싱#1 - mov 명령어 배우기 (0) | 2021.03.01 |
---|---|
리버싱#1 - segmentation fault 에러 해결하기! (0) | 2021.03.01 |
리버싱#1 NASM(넷와이드 어셈블러) 사용법 (0) | 2021.02.25 |
리버싱#1 x86 어셈블리 소개 (0) | 2021.02.25 |
리버싱#1 어셈블리 기본!! (0) | 2021.02.19 |
댓글