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
2013. 8. 27. 01:10

어셈블리어 - ADD,SUB 함수

ADD ... SUB ??

함수는 정말 쉽습니다.

함수의 이름대로 더하고 빼는 역활을 합니다.

 

ADD

예제 : ADD 인자1,인자2

인자2를 인자1와 더해 나온 값을 인자1에 넣는 명령어 입니다.

인자1 + 인자2  =(삽입)=> 인자1 

말이 필요없이 다른 예제를 보여드리겠습니다.

EAX엔 10이 들어있습니다.

ADD EAX,50

명령어를 실행 시키면 EAX엔 무슨 값이 들어가 있을까요?

네! 맞습니다 EAX(10) + 50 =(삽입)=> EAX

답은 60입니다~

 

SUB

예제 : SUB 인자1,인자2

인자2를 인자1에 빼서 나온 값을 인자1에 넣는 명령어입니다.

ADD명령어와 비슷하지만 더하기,빼기의 유일 차이점이 있습니다.

인자1 - 인자2 =(삽입)=> 인자1

예제

EAX엔 15000이 들어있습니다.

SUB EAX,5000

이 명령어를 실행 시키면 EAX엔 무슨 값이 들어가 있을까요?

비밀 댓글로 달아주세요~ ㅋㅋㅋ

맞추시는분들껜 사은품은... 없지만 작은 축하의 말을 해드릴게요 ㅋㅋ

 

이해하기 쉽죠??..그렇겠죠? 그럴거에요 여러분들은 똑똑하시니..

 

2013. 8. 27. 01:00

어셈블리어 - MOV,LEA 명령어

MOV , LEA 명령어란?

자 이제 본격적인 함수 명령어 공부에 들어갈텐데요.

공부하기 전에 이 명령어들은 컴퓨터가 우리 명령을 알아 들을 수 있도록 해주는 것이라는건

명심해야합니다. 간혹 내가왜 이런걸 공부하고 있지? 라시는분들도 계시기때문에..

 

MOV

└MOVE 의 줌말

예제 : mov 인자1,인자2

인자2를 인자1으로 을 넣는 일을 하는 명령어입니다.

레지스터 EAX로 예를 들어본다면

mov eax,100

은 100을 eax 저장공간에 값을 넣는다는 뜻이 됩니다.

그럼 eax엔 100의 값이 저장되있습니다.

주의할 점은 인자하나만으론 이 함수 사용이 안된다는것이고

인자1,2 가 모두 숫자로 이루어 져있으면 안됩니다.

대신 인자1,2에 모두 레지스터로 이루어 져있다면 괜찮습니다. 

LEA

예제 : lea 인자1,인자2

인자2를 인자1으로 주소를 넣는 일을 하는 명령어입니다.

레지스터 EAX,ESI로 예를 들어본다면

lea eax, dword ptr ds:[esi]

은 esi를 eax 저장공간에 주소를 넣는것입니다.

그럼 eax엔 esi의 주소가 저장되있습니다.

 

 

둘의 차이점을 확실히 아셔야합니다.

많이들 해깔려하시더라구요.

 

 

2013. 8. 27. 00:28

어셈블리어 - 레지스터*

레지스터가 뭐죠?

 

 레 지스터 뒤에 * 표시를 한 건 그만큼 중요하단 뜻입니다!

레지스터는 저장공간입니다.

C/C++ 에서는 변수와 같은역활을 하며 메모리에서 연산을 할 때 사용합니다.

기억장치들 중 속도가 가장 빠르며 사용이 편리하지만 이름은 정해져있습니다.

레지스터도 각각의 용도에따라 나뉘어져있는데요.

그 종류를 알아볼거에요

EA(Accumulator)X

흔히 계산용도(사칙연산)로 쓰입니다.

계산할 땐 이 변수를 가장 많이 자주 쓰죠 

ED(Data)X

이것도 EAX와 같은 연산으로 쓰입니다.

EAX를 쓰고있어서 부족할 때 땜빵,덤(?) 으로 쓰인다고 합니닼

EC(Count)X

루프문 반복문 을 사용할 때 카운팅의 역활을 한다고 합니다.

C언어로 예를 들어보면 for문에서 변수 i(Index) 의 역활을 하죠.

하지만 카운팅을 하지않을 땐 EAX EDX 처럼 보통 저장공간으로 연산으로

사용해도 무방하다고 합니다.

EBX

이 레지스터도 별거 없어요 ㅋㅋ

카운트 레지스터(ECX)처럼 특정 목적을 가진게 아니라서

연산으로 사용해도 되고 공간이 좀더 필요할때 사용해도 된답니다~

ESI,EDI

이건 약간 이해가 안가시겠지만 그래도 변수라고 생각하시면 쉽습니다.

다만 EAX~EDX는 주로 연산에 사용되지만

ESI는 문자열이나 반복 데이터 처리, 메모리옮기는데 사용됩니다.

"ESI는 시작지 인덱스"

"EDI는 목적지 인덱스 "

이 말이 재대로 축약된 말인거같습니다.

 

 

 

이처럼 어려운게 전혀 없게 설명을 해놨지만 놓친 부분이 있을 수도 있습니다.

그래도 이 정도로 이해만 했다면 충분히 알고 있는거라고 말할 수 있습니다 ^^

2013. 8. 26. 19:43

어셈블리어 - 어셈블리의 명령어 방식은?

어셈블리의 명령어 방식은?

"명령어 + 인자"

셈블리구조 입니다.....

너무 간단해서 당황하셨을듯;; ㅋㅋㅋ

 

명령어 부분에는 함수, 풀어쓰면 컴퓨터에게 명령을 내릴 단어, 뭔가 있어보이게 예기하자면

옵코드(Opcode)가 들어갈 것 입니다. 뭐 결국은 "명령어 = 옵코드 = 함수(?)" 란 예기입니다.

인자 부분에는 명령에 해당하는 값을 말합니다. 것도 뭔가 있어보이게 예기하자면

오퍼랜드(Operand)가 들어갈 것 입니다. 인자 부분은 최대 2개까지 들어갈수가 있습니다.

눈치가 빠르신분들은 "인자 = 오퍼랜드" 아시겠죠??ㅋㅋ

 

함수는 모든언어에 함수가 있듯이 어셈블리에서도 컴퓨터에게 명령을 내릴 특정 단어들이 있습니다.

명령어라고 하죠?

근데 어셈블리는 다른 언어들보다 비교적 적고 외우기도 쉬우며 재밌기까지(?) 합니다.

이런 비유를 들긴 좀 그렇다만 북극에 빙하가 있다하면 우린 해수면에 떠오른 부분만 외우면 됩니다.

바다 안에 잠겨있는 것들은 많기때문에 그때그때 필요할 때 구글검색엔진을 쓰면 되요.

전부다 외울 필욘없단 소리죠.

 

C/C++언어와 어셈블리의 명령어 방식 을 살펴보면 

우리가 윗옷을 입을 때로 예를 들어봅시다. 

C/C++에선

{

윗옷 입기 시작

옷을 집는다

옷을 입는다

}

로 끝나지만 어셈블리어는 세세한 하나하나 까지 설정을 해야하기 때문에

{

윗옷 입기 시작

옷을 집는다.

왼팔을 옷왼소매에 넣는다

오른팔을 오른소매에 넣는다

머리를 넣는다

올라간 옷을 내린다

}

 

이처럼 좀 복잡하긴하지만 집중해서 하다보면 성실함? 집중력?을 얻으실수 있을겁니다 ㅋㅋㅋㅋ

 

 

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

어셈블리어 - INC,DEC,NOP  (3) 2013.08.27
어셈블리어 - ADD,SUB 함수  (1) 2013.08.27
어셈블리어 - MOV,LEA 명령어  (1) 2013.08.27
어셈블리어 - 레지스터*  (0) 2013.08.27
어셈블리어 - 어셈블리언어가 뭐죠?  (0) 2013.08.25
2013. 8. 25. 18:24

어셈블리어 - 어셈블리언어가 뭐죠?

어셈블리언어가 뭐죠?

 

셈블리언어는 C언어와 C++ 언어랑 같은 프로그래밍 언어 입니다.

하지만 특정 목적의 프로그램을 만들려고 소스를 적어넣을때엔 C/C++ 언어로 10줄의 소스만 적어넣으면 완성이

되는 프로그램이 어셈블리어에선 30줄 가까이 될 수 도 있기때문에 굉장히 복잡하고

 C/C++ 보단 조금 저급한 언어 여서 더 어려울 수 도 있습니다.

그래도 복잡하긴 하지만 기본적인 옵코드알고리즘 , 이동순서 등만 간단히 알면

"아아~ 이렇게 되는구나 *_*!!"

하고 눈이 번쩍 은근 재미를 느낄 수 있으니 포기하지말고 열심히 해봅시다..! ㅋㅋ

 

어셈블리어에선 제일 기초가 되는 옵코드부터 알아보도록 하겠습니다.

2013. 8. 25. 16:03

컴퓨터구조 - 기억장치의 종류

기억치에도 종류가?

퓨터 5대 장치들 중 하나인 기억장치는 여러가지 세분장치가 있습니다.

기억장치를 세분류로 보기쉽게(?) 나누어 보았습니다~

 

①캐시메모리

자주쓰는 메모리들을 임시로 저장하여 필요할때마다 바로 꺼내쓰는 장치

 

②주기억장치

소프트웨어와 CPU 사이를 연결시켜주는 가장 중요한 작업 공간 역활

주기억장치에는 RAMROM이 있습니다.

 

ROM = 읽기 전용 / 비휘발성 메모리

종류

 특징

 Mask ROM

 제조시 기억한것으로 삭제 불가

 PROM

 사용자가 단 한 번만 기록 가능

 EPROM

 자외선을 이용해 기존 데이터 삭제여러번 기록 가능

 EEPROM

 전기적 신호를 이용해 기존 데이터 삭제 없이 여러번 기록 가능

 EAROM

 전기적 가변롬. 모두 지우지 않고 선택적 변경 가능

 Flash EEPROM(플래시 메모리)

 비휘발성읽고 쓰기 가능

* 비휘발성 메모리 : 전력(전원)이 나가도 저장되 있던 메모리는 없어지지 않습니다..

 

 

RAM = 읽기 쓰기 가능 / 휘발성 메모리

 종류/특징

 재충전

속도 

전기소모 

저장용량 

가격 

용도 

DRAM

필요 

느리다 

적다 

크다 

싸다 

메인메모리 

SRAM 

불필요 

빠르다 

많다 

작다 

비싸다 

캐시메모리 

* 휘발성 메모리 : 전력(전원)이 나갈 경우 저장되 있던 메모리들은 전부 사라집니다.

 

대충 RAM ROM 의 특징만 보면 될거같아요 ㅋㅋㅋ

 

③보조기억장치

비휘발성 장치,  현재 사용하지 않는 프로그램을 저장하는 역활입니당

 종류

 특징

 자기드럼

 자성체를 입힌 원통을 한쪽 방향으로 회전시키고 그주위에 자기 헤드로 판독기록

 자기코어

 도넛 모양의 링에 자성물질을 입힌것 파괴메모리(자료를 읽으면 데이터 손실)

 자기디스크

 둥근원형에 자성물질을 입혀 회전시켜 기록 판독(하드디스크,플로피디스크,CD)

 광디스크

 금속표면에 미세한 빛을 사용 정보 기록판독

 자기테이프

 플라스틱 테이프표면에 자성 물질을 입힌것 

복잡하죠? ㅋㅋ

자기디스크만 보면될거에요

 

 

 

외우기나 이해하기 힘드시다면 실제 컴퓨터의 동작에 비교하여 공부하시면 좋아요~

예를 들면 컴퓨터 부팅 후 여러작업을 하다가 갑자기 컴퓨터 전원이 나가버리고

다시 부팅을 하면 전 작업들이 모두 날아가있잖아요?? 그게 RAM 의 특징이에요 ㅋ

글구 우리가 게임같은것들을 하드디스크에 다운받는것도 항상 쓰는건아니지만

그때그때 가져와 쓰려고 저장해놓은 거잖아요?? 이런식으로 이해하시면 쉬워요 ^^

 

 

 

 

2013. 8. 25. 13:23

컴퓨터구조 - 하드웨어 5대 장치

하드웨어 5대 장치?

드웨어들 중엔 각각의 맡은 목표,하는일들이 있는데요.

하드웨어를 우리 신체로 비유하고 소프트웨어는 정신,마음으로 비유한다면

우리 신체 부위별로 눈은 보는것 귀는 듣는것 코는 맡는것 입은 먹는것 등등 모두 각자 할 일들이 있듯이

 컴퓨터도 마찬가지 입니다.

그 할 일 중 대표적인 5개의 목표로 나눈 것이 5대 장치 인데요. 

 제어 장치

먼저 제어 장치는 말그대로 컴퓨터를 제어 통제 할 수 있는 장치를 말하는데요.

컴퓨터가 1+1을 계산을 할 때엔 제어장치에서 먼저 신호를 받고 연산장치에게 

"야 1+1 계산해" 라고 명령을 주어 제어를 해주는 대충 사람의 부위로 치면 뇌에 해당하는

부분입니다.

 

기억 장치

말그대로 기억을 해주는 장치를 말합니다.

그종류에는 주기억장치 , 보조기억장치가 있는데요. 다음 강좌때 설명 드리겠습니다.

장치는 RAM , 하드디스크 등이 있습니다.

 

입력 장치

입력장치는 컴퓨터에게 입력신호를 주는 장치입니다.

장치로는 마우스,키보드,스케너 등 사람이 컴퓨터 내부로 입력을 할 수 있게

도와주는 하드웨어를 말합니다.

 

출력 장치

입력관 반대로 컴퓨터가 사람에게 보여주거나 출력하고 결과물을 빼내 우리에게 보여주는

장치입니다.

장치로는 모니터 , 프린터기 등이 있습니다.

 

연산 장치

컴퓨터 내부의 계산기같은 존재로 산술 논리연산 을 합니다.

대표적인 장치가 CPU 가 있는데요. 다음 시간에 설명드리겠습니다.