본문 바로가기

System

프로세스 관리(Process Management) 프로세스 레지스터, 스택, 포인터, 실행중인 프로그램, 데이터 등의 집합체이다. 프로그램과 프로세스의 차이점은 현재 메모리에 적재되어 있는지이다. 즉, 아직 메모리에 적재되지 않고 보조기억장치에 존재하는 데이터의 경우는 프로그램이다. 여기서 해당 프로그램이 메모리에 적재되면 프로세스가 된다. 프로세서에 의해 수행되는 프로그램의 단위로 현재 실행 주잉거나 곧 실행 가능한 PCB(Process Control Block)를 가진 프로그램이다. 자원 할당을 위한 기본 구분 단위로 사용된다. 스레드(Thread) 제어의 흐름을 의미한다. 프로세스에서 실행의 개념만 분리한 것이다. 프로세스의 구성을 크게 두 가지로 나눌 때 제어의 흐름 부분과 실행 부분으로 나눌 수 있다 이때, 스레드는 실행부분을 의미한다. 해당 .. 더보기
운영체제(OS-Operating System) 운영체제(OS-Operating System) 운영체제는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램들의 모임이다. 운영체제에 따라 GUI를 제공하여 효과적인 업무 처리를 기대할 수 있으며 유닉스의 경우 서버관리를 효과적으로 할 수 있다. 운영체제의 목적은 다음과 같다. 처리 능력의 향상 : 시간당 작업 처리량, 평균 처리 시간을 개선한다. 신뢰성 향상 : 실패 없이 주어진 기능을 수행할 수 있어야 한다. 응답 시간의 단축 : 사용자가 시스템에 요청한 작업의 반응 시간을 단축한다. 자원 활용률 향상 : 한정된 자원을 효과적으로 사용할 수 있도록 해준다. 가용성 향상 : 고장, 오류가 발생해도 운영상 영향을 최소한다. .. 더보기
DMA(Direct Memory Access) DMA(Direct Memory Access) CPU의 개입 없이 I/O 장치와 기억장치 사이의 데이터를 전송하는 접근 방식이다. 메모리와 주변장치를 직접 관리하여 속도가 빠르다. CPU가 DMA로 보내는 제어 정보 데이터 R/W용 메모리의 주소와 제어신호 메모리 블록은 워드 수를 표시하는 워드 카운트 DMA 전송을 위한 시작 제어 신호 DMA 동작 방식의 종류 Cycle Stealing : DMA 제어기와 CPU가 버스를 공유하고 CPU가 버스를 사용하지 않은 사이클에만 접근하고 CPU보다 높은 우선순위를 갖는다. Burst Mode : DMA 제어기가 버스를 점유하고 동작 완료 후 버스를 해제한다. 더보기
메모리 시스템(Memory System) 메모리 시스템(Memory System) 메모리는 여러 계층을 통해 효율적으로 구성한다. 보조기억장치, 주기억장치, 중앙처리장치로 이루어진 이유이기도 하다. 액세스 속도가 높아질 수록 용량은 줄어들지만 비용은 증가한다. 반대로 액세스 속도는 느리지만 용량이 클 경우 비용은 감소한다. 이러한 특징 때문에 계층적으로 메모리를 구조화한다. 캐시 메모리(Cache Memory) 주기억장치와 중앙처리장치 사이에 존재하며 둘 사이의 속도 차이를 극복하기 위해 존재한다. 캐시 메모리와 같은 고속의 메모리를 통해 빠른 처리를 할 수 있다. 캐시 메모리는 중앙처리 장치가 읽어들인 데이터로 채워지는 버퍼이다. 캐시 메모리는 직접 사상(Direct Mapping)과 연관 사상(Associate Mapping), 집합 연관 .. 더보기
CPU, GPU, RAM - CPU Instruction Cycle, Bus System CPU, GPU, RAM 입력장치로 부터 연산을 하고 그 결과를 출력장치를 보내는 역할을 하는 컴퓨터의 핵심 장치이다. 컴퓨터에서 사용되는 핵심 장치들을 크게 나누면 보조기억장치(HDD, SSD), 주기억장치(RAM), 중앙처리장치, 그래픽처리(CPU, GPU)가 있다. 보조기억장치는 데이터들을 저장하기 위한 장치로 비휘발성이다. 주요 장치들 중에서 처리속도가 가장 느리지만 저장 가능 용량이 가장 높다. 주기억장치는 보조기억장치에 있는 파일을 불러올 때 잠시 담아두는 공간으로 휘발성이다. 즉, 컴퓨터가 실행되는 동안에는 해당 공간에 담아진 데이터들이 남아있지만 전원이 꺼지면 없어진다. 잠깐이나마 유지시킬 수 있는 방법들이 있지만 그 또한 완전한 데이터를 기대할 수는 없고 일시적이다. 주요 연산장치는 CP.. 더보기
코드에서 프로그램 과정 및 CPU [Reversing] 전처리기 : #include 같은 헤더 파일이나 메크로 파일을 만나게 되면 헤더파일을 삽입한다. 컴파일러 : 컴파일러는 3개의 단계로 나눠지며 'Front-end -> Middle-end -> Back-end'로 나눠진다. - Front-end 단계에서는 코드의 문법적 오류를 점검하고 중간언어(중간언어가 있으면 각 CPU 회사마다 언어에 대한 컴파일러를 갖고있지 않아도 된다.)를 생성한다. - Middle-end 단계에서는 변수의 정의와 선언이 잘 이루어졌는지 점검을 한다. 또한 코드에 대한 최적화를 어느정도 진행한다. - Back-end 단계에서는 최적화 단계를 한번더 진행하고 어셈블리어 코드를 생성한다. 어셈블러 : 어셈블러어로 만들어진 코드를 기계어로 바꿔준다. 어셈블리어와 기계어는 거의 대응하기 .. 더보기
범용레지스터 [Reversing] 범용레지스터에는 여러 종류가 있습니다. 산술논리 범용레지스터 : EAX, EBX, ECX, EDX 인덱스 주소 레지스터 : EDI, ESI 포인터 주소 레지스터 : EBP, ESP, EIP EAX : 산술 논리 연산값을 저장합니다. 'E'가 붙어있으므로 32bit 이고 AX는 16bit 입니다. 'E'는 'Extended'의 약자이며 2배 큰 크기를 의미합니다. EBX : 주소값을 저장하는 레지스터입니다. ECX : 반복 카운터 즉, LOOP 명령 사용시 ECX의 카운터 값이 -1 되며 반복되고 0이 되면 반복을 멈춥니다. EDX : EAX에서 연산후 넘치거나 나눗셈을 했을 때 몫과 나머지를 나눠야 할 때 EDX로 넘어가게 되고 FLAG 레지스터의 flag값을 확인하여 EAX의 연산값이 넘쳤는지 잦은 확.. 더보기
crack_me[1] 리버싱 [Reversing] Crack_me [1] 리버싱입니다. - x64dbg : 올리디버거와 같은 디버깅 툴입니다. 올리디버거는 업데이트가 끊킨듯 하여 x64dbg를 사용하였고 gui 환경도 더 깔끔한 편입니다. - PEview : 윈도우 PE 파일의 구조를 보기위한 툴입니다. 핵사값으로 PE 파일의 구조가 들어있습니다. - crack me [1]은 '컴퓨터에서 하드디스크를 CD-ROM으로 인식하게 만들어라' 라는 파일입니다. 먼저 해당 파일을 리버싱 하기위해 'x64dbg'에서 열어주고 'EntryPoint'를 찾아야 합니다. 'EntryPoint'는 프로그램의 시작위치로 디버거로 파일을 열었을 때 자동으로 중단점(Brack Point)를 잡아줄 때도 있지만 없을 때도 있습니다. 그럴 때 프로그램의 시작 위치를 찾는 여러 방.. 더보기