|
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
|