1580, 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 : 10764     Date : 2013/07/18 01:51
[불법/스팸글로 신고하기]



    
1420   [펌]Ptrace를 이용한 재미는 해킹.[4]     ^^
02/08 10845
1419   해킹기법? (기발하다고 해야하나,웃기다고 해야하나)[35]     whqkdnf000
07/31 10816
  [Reverse Engineering] 리버싱의 기초 - 범용 레지스터와 Assembly(Pop,Mov)     zen0c1de
07/18 10763
1417   [펌]스니핑[1]     loveaaav
03/24 10702
1416   c언어 for문      hacs98
06/15 10672
1415   I. 리눅스 구조 및 일반 명령어.     괴도js
07/04 10616
1414   [C기초] 11 - 함수 매개변수로 배열을 넘기려면?      sihun1113
05/01 10573
1413   왠만한사람들은다알지도모르겠지만[6]     백룡출해
03/17 10561
1412   C언어(진법)[9]     whqkdnf000
02/25 10534
1411   메모리 덤프(블루 스크린=STOP 스크린) 코드 및 해결[1]     ROK.AF
02/09 10485
1410   네트워크 개념 휘어잡기 7[8]     소유
09/16 10451
1409   리눅스 명령어 한꺼번에(소유님꺼)[11]     ssakura
07/07 10407
1408   알기 어렵게 설명한 Buffer Overflow[4]     blackcoder
02/17 10347
1407   [동강]백트랙을 이용한 재밌는 놀이들![4]     cdpython
09/29 10293
1406   개발자가 알아야할 10가지 보안팁으로 코드를 보호하자.     푸른하늘
09/01 10281
1405   [자작]포렌식을위한NTFS구조[2]     havu
01/11 10273
1404   네트워크 개념 휘어잡기 6[10]     소유
09/15 10265
1403   배열 내에서 랜덤한 n개 추출하기[2]     kjwon15
12/05 10253
1402   D.Dolphin님 질문내용] LAN과 WAN의 차이점과 VAN의 정의[5]     푸른하늘
09/11 10223
1401   원격종료....[39]     bsjzzz
01/02 10155
[1][2][3][4][5][6][7][8] 9 [10]..[79]

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