1619, 1/81 회원가입  로그인  
   sysopp2002
   버퍼오버플로우 배우기 2

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1966 [복사]


이제 스택의 구조를 살펴볼 차례입니다.

하지만 리눅스의 기본적인 명령어들을 모르실 분들을 위해 간략하게 필요한 명령어를 알려드리겠습니다.

pwd :현재의 디렉토리 출력
ls :해당 폴더에 파일 정보 출력
cd :폴더 이동
cp : 복사
gcc :컴파일러
gdb :디버거
find :파일 검색


뭐 이정도만 알고 계시면 배우는데에는 무리없습니다.

자 이제 슬슬 스택의 구조나 알아봐야하는데 어셈블리가 먼저군요

어셈블리는 간략하게 설명드리며 궁금하신게 있으시면 다른 분들의 강좌를 보시기 바랍니다.

기본적으로 어셈블리어는 이런형식으로 되어있습니다.
[라벨]  [오퍼랜드 1] [오퍼랜드 2]
값의 방향     <-

물론 위에건 인텔 문법에 한정되어있느거지만 요즘은 다들 인텔 문법을 쓰니 이 강좌도 인텔 문법을 기준으로 하겠습니다.

우선 기초인 레지스터를 살펴보죠

우리가 쓸 레지스터는 기본적으로 ax,bx,cx,dx,esp,ebp 이  6가지 입니다.
이 6가지만 잘 알면 스택의 구조 알기에는 충분합니다.

eAX: 곱셉,나눗셈 계산등에 사용되며 함수의 리턴값을 저장
ebx: 메모리 주소지정
ecx:반복문의 사용
edx: 부호 확장 명령
esp: 스택 포인터라 하며   이게 스택의 구조 배울떄 중요
ebp: 스택은 항상 변하기 떄문에 변수의 기준주소를 위한 레지스터 즉 ESP를 보조해준다.

이 6가지  개념을 익히는게 중요합니다.  
그리고 나중에 중요한레지스터들은 따로 보충설명을 해드릴겁니다.

이제 명령어들을 살펴보죠.


MOV : 값을 옮긴다
예: MOV %EAX, %EBX
이 명령을 해석해보면 EBX값을 EAX에 옮긴다는걸 알수 있습니다.

push : 스택에 값을 푸시한다.
예: push %EAX
이 명령은 EAX 레지스터에 들은 값을 스택에 푸시한다는 뜻입니다.

pop : 스택에 들어있는 값을 해당 레지스터에 옮긴다.
예: pop %eax
스택에서 팝을해서 eax에 저장합니다

sub : 값을 뺀다
예 : sub %eax, 40
eax 레지스터에서 40을 뺀다.

ADD : 값을 더한다
예: add %eax, 50
eax에 50을 더한다.

lea :기본적인 명령은 MOV와 똑같지만 차이점이 있다
예: lea %eax, %ebx
eax에 ebx 값을 옮긴다.


우선 이정도만 설명하면 될듯 싶군요.

이 명령을 다 외우실 필요는 없고 천천히 배우다 보면 이제 어떤게 어떤 명령을 수행하는지 아실수 있습니다.

어쩌다보니 스택의 구조는 다음 강좌에 알아봐야 될것같네요.

  Hit : 8687     Date : 2012/02/21 08:32



    
smartbloger 감사합니당 2012/06/16