2013. 8. 27. 19:39

컴퓨터구조 - CPU(중앙처리장치)

CPU 란?

 

컴퓨터 시스템 전체를 제어하는 장치입니다.

산술 , 논리 연산 장치와 제어 장치, 레지스터로 구성되어 있어

컴퓨터의 모든 행동과 제어,연산은 CPU에서 도맡아 하죠.

 

* 산술 . 논리 연산장치(ALU)

└ 사칙연산을 수행하는 산술연산과 참과 거짓을 판별하는 논리연산을 수행.

* 제어 장치

CPU 내부에서 일어나는 모든 작업을 통제하고 관리

적절한 순서로 명령을 꺼내고 명령을 해석하여 그 해석에 따라

컴퓨터 시스템의 적절한 부분으로 제어 신호를 전달합니다.

* 레지스터

CPU에서 사용하고 내장되있는 기억(저장)장치입니다.

 

이로써 컴퓨터 내부의 기억장치를 모두 소개 했습니다.

모든 기억장치의 비교

속도                    종류                    저장공간

High         [레지스터(Register)]           Low

↑        [캐시기억장치]                ↓

↑        [주기억장치]                   ↓

Low          [보조기억장치]                  High

 

 

2013. 8. 27. 01:30

어셈블리어 - CALL,CMP,JMP 함수

CALL! CMP!

함수들은 잘 쓰면 정말 재밌는 함수입니다 ㅋㅋㅋ

그리고 어셈블리어를 쓰면서 자주 등장하는 요주의 인물들(?)입니다.

 

CALL

예제 : CALL 인자1(주소)

CALL 명령어는 인자를 하나만 받습니다.

CALL의 뜻인 '부르다'처럼 인자1를 불러 오는 명령어입니다.

예제

( 00402000 - ADD EAX,100 )

00401000 - CALL 00401000

00402000 주소엔 add 함수가 있고 00401000 주소엔 call 함수가 있습니다.

00401000 주소의 call 문을 실행할 경우 00402000 주소까지 갈 필요없이

00401000 주소를 call문으로 불러 냈으니 그위치의 함수를 실행하게 됩니다.

대충 C언어의 goto문과 비슷한 원리입니다.

 

CMP

예제 : CMP 인자1,인자2

인자 2개를 비교하는 역활을 합니다.

예제

CMP EAX,200

EAX 안에 들어있는 값이랑 200 이랑 비교를 합니다.

근데 여기서 비교만 하면 아무 의미가 없습니다.

비교 한 후 조건이 따라야하는데 그 조건으로 JMP 명령어가 항상 따라옵니다.

CMP 함수가 나올땐 JMP 함수는 항상 붙어있다 생각하시면 됩니다.

JMP 함수는 특정 지역으로 이동(점프)을 하는것입니다.

예제

CMP EAX,EDX

JE 00401000

(JE = 결과가 같을경우 점프 아닐경우 점프를 수행하지않음)

EAX의 값과 EDX의 값을 비교합니다. 그다음 JMP 함수 중 하나인

JE가 비교한 결과를 보고 점프 수행을 할지 안할지 판단 후 시행하게 되는겁니다.

 

JMP 함수의 종류

명령어

 의미

 부등호

 플래그 조건

 JA

 jump if (unsigned) above

 >

 CF = 0 and ZF = 0

 JAE

 jump if (unsigned) above or eual

 >=

 CF = 0 or ZF = 1

 JB

 jump if (unsigned) below

 <

 CF = 1

 JBE

 jump if (unsigned) below or equal

 <=

 CF = 1 or ZF = 1

 JC

 jump if carry flag set

 

 CF = 1

 JCXZ

 jump if CX is 0

 

 CX = 0

 JE

 jump if equal

 ==

 ZF = 1

 JECXZ

 jump if ECX is 0

 

 ECX = 0

 JG

 jump if (signed) greater

 >

 ZF = 0 and SF == OF

 JZ

 jump if zero

 ==

 ZF = 1

 

감사합니당

 

'어셈블리어' 카테고리의 다른 글

어셈블리어 - PUSH,POP 함수  (1) 2013.08.27
어셈블리어 - INC,DEC,NOP  (3) 2013.08.27
어셈블리어 - ADD,SUB 함수  (1) 2013.08.27
어셈블리어 - MOV,LEA 명령어  (1) 2013.08.27
어셈블리어 - 레지스터*  (0) 2013.08.27
2013. 8. 27. 01:25

어셈블리어 - INC,DEC,NOP

INC DEC NOP

함수 들은 뭔가 귀엽고(?) 재밌는 부분이 있습니다.

특히 NOP 함수는 리버스 엔지니어링 쉽게말하자면 크랙을 제작할때 가장 많이 쓰이는

함수명령어입니다.

 

INC

예제 : INC 인자1

인자1에다가 1을 더합니다.

C언어에서의 i++ 와 같습니다.

예제

EAX = 10

INC EAX

위 명령어를 실행하고 나서의 EAX 값은 INC 명령어로 인해 +1 이 되었으므로

EAX = 11 이 될 것입니다.

 

DEC 

예제 : DEC 인자1

인자1에다가 1을 뺍니다.

C언어에서의 i-- 와 같습니다.

예제 

EAX = 10

DEC EAX

위 명령어 실행 후 결과 값은 EAX = 9 가 되있을 것입니다.

 

NOP 

예제 : NOP

이 함수는 유일하게 인자를 받지않습니다.

특정 자리에 NOP로 수정을 해버리면 그자리는 아무 이벤트를 발생시키지 않습니다.

명령어를 무효화 시킨다는 말도 되고 없에 버린단 말도 됩니다.

이 함수로 크랙,핵쉴드 바이패스 등등 아주 유용 나쁘게 쓰입니다.

'어셈블리어' 카테고리의 다른 글

어셈블리어 - PUSH,POP 함수  (1) 2013.08.27
어셈블리어 - CALL,CMP,JMP 함수  (1) 2013.08.27
어셈블리어 - ADD,SUB 함수  (1) 2013.08.27
어셈블리어 - MOV,LEA 명령어  (1) 2013.08.27
어셈블리어 - 레지스터*  (0) 2013.08.27