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



    
1419   Hacking 커리큘럼 시스템분야     카르페이
05/08 6228
1418   밑에 버퍼오버플로우 왕기초 찾으신다는분[1]     치킨발랄
03/13 7135
1417   find 명령어중 -perm 옵션에서 -,+의 차이[1]     파란바다
08/04 21949
1416   ftz 서버 구축해보기[15]     파란바다
09/10 19767
1415   왜 고등학교[5]     파란눈물
02/05 5589
1414   함수의 기능에 관하여     컨티뉴
05/31 5450
1413   기본 문법을 통해 보는 c++의 기본 구조     컨티뉴
05/31 5625
1412   TFT LCD 모니터의 3대 핵심 모듈에 관해[7]     컨티뉴
06/29 5607
1411   리눅스에서 인터넷이 안될때(asiris2000님 강좌)[6]     컨티뉴
10/13 7977
1410   윈도우즈xp 팁(1)[8]     컨티뉴
10/09 7735
1409   오버클럭킹의 원리[11]     컨티뉴
10/09 8233
1408   c좀알려주실분[7]     키메라
01/09 4995
1407   브로드캐스트에대한 정보하나 알려드립니다.[2]     zzangon7
08/01 6802
1406   OSI 7layer에 대한 정보 ^^;     zzangon7
07/30 6200
1405   컴퓨터 초보인데[5]     zlxpcmdh97
03/04 7339
1404   레벨업 하려면     zeuswoo7
03/03 6072
1403   [해설]C언어의 함수라는 개념이 잘 이해되지 않을 때[2]     zephyros215
03/31 7203
1402   About Reversing     zen0c1de
07/19 8102
  [Reverse Engineering] 리버싱의 기초 - 범용 레지스터와 Assembly(Pop,Mov)     zen0c1de
07/18 10636
1400     [re] 간단하게 리눅스 계정 추가하는 방법!!![6]     zcb707
08/03 5546
[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