1577, 9/79 회원가입  로그인  
   zen0c1de
   http://dieuhouse.tistory.com
   [Reverse Engineering] 리버싱의 기초 - 범용 레지스터와 Assembly(Pop,Mov)

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=7892 [복사]


EAX (Accumulator)

        - 산술, 논리 연산의 중심이 되는 레지스터이다.

        - 산술, 논리 연산을 할 때 EAX에 많이 넣고 사용한다.

        - 함수의 리턴 값을 저장하는 레지스터이다.

        (즉 EAX는 하나이기 때문에 리턴 값은 2개 이상이 될 수 없다.)



        EBX (Base Register)

        - 간접 번지 지정 시 사용된다.



        ※ 간접 번지 : int array[]={1,3,5}; 에서 3이라는 변수를 쓰고싶으면 array[1]을 사용해서 인덱스에 접근해 주

        는데 여기서 1이 간접 번지이다. array[1]을 풀어서 쓰면

        *(array+2)가 된다.



        ECX (Count Register)

        - 루프와 같은 명령의 반복수행이 필요로 할 떄 반복횟수 지정에 주로 사용한다.

        - C에서 사용하는 while, for문의 반복문과는 다르다.(Assembly에서 사용하는 반복)

        - ECX에 n을 넣으면 n번 돈다는 뜻이다.




        EDX (Data Register)

        - 간접 번지 지정에 사용되며, 곱셈 나눗셈을 할 때에는 보조 Accumulator로 사용 되어        지기도함.

        - EAX를 도와준다는 느낌이 강하다.

        - 2의 32승은 대략 42억 정도가 되는데, 어떤 값을 곱했을 때 그 결과가 42억이 넘어가면, EAX의 앞에 EDX가 붙어서

        도와준다. (범용 레지스터는 32bit라서 EAX로는 2의 32승,         약 42억 정도 밖에 표현하지 못한다.



포인터 레지스터(Pointer Register)

- 스택과 관련이 있는 레지스터이다.



        ESP (Stack Pointer)

        - 스택의 가장 윗 부분을 가리킨다.

        - Top Pointer라고도 한다.

        - Full Descending 방식을 사용하는 Intel Architecture의 경우, 가장 최근에 스택에 들어온 데이터를 가리킨다.



        EBP (Base Pointer)

        - 스택의 바닥을 가리킨다.

        - Stack Frame을 사용할 경우 현재 실행중인 함수를 호출한 함수가 사용하는 Stack Frame의 바닥을 가리킨다.



인덱스 레지스터 (Index Register)

- 문자열과 관련된 레지스터

- 다른 범용 레지스터와 마찬가지로 연산과 간접 번지 지정에 사용된다.

- 문자열을 비교하거나 전송하는 스트링 명령에서는 다음과 같이 사용된다.

        

        ESI (Source Index)

        - 복사 혹은 비교를 하는데 사용되는 Source 문자열을 나타낸다.



        EDI (Destination Index)

        - 복사 혹은 비교를 하는데 사용되는 Destination 문자열을 나타낸다.



------------------------------------------------------------------------------------

명령어



POP



ex) POP [Operand]

- ESP가 가르키는 곳에 저장된 내용을 Destination Operand 에 저장 후 ESP값 조정

( Ascending Stack : ESP값 감소, Descending Stack : ESP 값 증가 )



MOV



ex) MOV [Destination], [Source]

- 데이터 복사 ( 값 복사 )

용도:1. 레지스터 -> 메모리로 복사

      2. 메모리 -> 레지스터로 복사

      3. 레지스터 -> 레지스터로 복사

      4. 메모리 or 레지스터에 값을 넣음



※ 메모리 -> 메모리로 복사 시에는 사용하지 않는다!

   (메모리에서 메모리로는 복사가 불가능하다, 메모리 -> 레지스터 -> 메모리와 같은 방식으로    해야 가능하다

※ Destination Operand와 Source Operand의 크기가 다를 때는 사용하지 못한다.

  Hit : 11611     Date : 2013/07/18 01:51
[불법/스팸글로 신고하기]



    
1417   해킹기법? (기발하다고 해야하나,웃기다고 해야하나)[35]     whqkdnf000
07/31 11632
  [Reverse Engineering] 리버싱의 기초 - 범용 레지스터와 Assembly(Pop,Mov)     zen0c1de
07/18 11610
1415   c언어 for문      hacs98
06/15 11592
1414   c++ 강좌[7]     jhon55
08/12 11579
1413   [펌]스니핑[1]     loveaaav
03/24 11564
1412   배열 내에서 랜덤한 n개 추출하기[2]     kjwon15
12/05 11562
1411   ping아는 카페 해킹 고수님에게 들은 소리입니다[21]     장세만
07/14 11559
1410   I. 리눅스 구조 및 일반 명령어.     괴도js
07/04 11552
1409   [펌]해커들의 흔적지우는방법[28]     starztp
10/08 11511
1408   C언어(진법)[9]     whqkdnf000
02/25 11431
1407   왠만한사람들은다알지도모르겠지만[6]     백룡출해
03/17 11406
1406   [C기초] 11 - 함수 매개변수로 배열을 넘기려면?      sihun1113
05/01 11380
1405   메모리 덤프(블루 스크린=STOP 스크린) 코드 및 해결[1]     ROK.AF
02/09 11372
1404   개발자가 알아야할 10가지 보안팁으로 코드를 보호하자.     푸른하늘
09/01 11283
1403   네트워크 개념 휘어잡기 7[8]     소유
09/16 11259
1402   알기 어렵게 설명한 Buffer Overflow[4]     blackcoder
02/17 11251
1401   [프로젝트]상.절.지 해킹사전//해킹공부사이트 URL리스트[5]     W.H.
10/30 11144
1400   리눅스 명령어 한꺼번에(소유님꺼)[11]     ssakura
07/07 11139
1399   네트워크 개념 휘어잡기 6[10]     소유
09/15 11082
1398   원격종료....[39]     bsjzzz
01/02 11067
[1][2][3][4][5][6][7][8] 9 [10]..[79]

Copyright 1999-2022 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com