gdb 명령어)
PUSH : 스택에 데이터를 삽입
ex) push word
push dword
push word
• push 명령어는 자동으로 ESP를 4 바이트 감소 시킴
POP : 스택에서 데이터를 꺼냄(현재 위치한 스택인듯?)
ex) pop eax
pop ebx
• 스택에서 4 바이트를 꺼내와 지정한 레지스터에 삽입
• pop 명령어는 자동으로 ESP를 4 바이트 증가 시킴
Segmentation Fault
이 프로그램( a.out )을 실행하면 어떤 결과가 나올까요? Segmentation Fault
Segmentation Fault
• 프로그램이 허용되지 않은 메모리 영역에 접근을 시도하거나, 잘못된 방법으로 메모리 영역에 접근을 시도할 경우 발생한다.
발생 이유)
• 프로그래머가 생각하지 못한 사용자 입력값이 있었다?
• 그냥 프로그램을 잘못 짰다
• 프로그램에 문제가 있다는 의미
즉, 끝맽음을 제대로 하지 않은 것이다.
프로그램의 끝은 시스템 콜을 이용해야 함.
시스템 콜
<system calls list>
system calls list에 의하면,
eax 에 들어가는 값 1이 함수 코드번호이고 1번은 exit함수를 뜻한다.
ebx 에 들어가는 값 0은 인자로 들어가는 값이다.
즉, C언어 코드로 해석하면 exit(0)란 의미이다.
따라서 프로그램을 종료하겠다는 의미가 된다.
결국 이 프로그램( a.out )이 이제는 정상적으로 종료된다.
대괄호 [ ]의 사용.
어셈블리언어에서 대괄호( [ ] )는 포인터를 의미한다. 즉, 해당 값이 가리키는 주소를 의미한다.
위 코드에서의 사용 예를 보면,
mov dword [ebx], 0x10
16진수 0x10이라는 값을 ebx가 가리키는 주소에 4바이트 크기(dword)의 공간에다 넣어라. 하는 의미가 된다.
'Reverse Engineering > gdb' 카테고리의 다른 글
lea, and, or, xor 명령어 (0) | 2020.10.10 |
---|---|
sub, add 명령어 (0) | 2020.10.10 |
gdb 명령어, 리틀엔디언 방식 (0) | 2020.10.07 |
gdb 실행, 명령어 (0) | 2020.10.07 |
gdb at&t 방식을 intel 방식으로 바꾸기 (0) | 2020.10.07 |
댓글