본문 바로가기

CS

(44)
[어셈블리어] 어셈블리어_범용 레지스터 어셈블리 언어 배우는 이유 예전에는 악성코드들이 어셈블리 언어로 작성되었다. 지금은 어셈블리어로 작성되지 않는다. 하지만 어셈블리 언어를 배우는 이유는 악성코드의 동작원리를 명확하게 알 수 있기 때문이다. 예를 들어, 씨언어로 바이러스를 만든다고 하자, 정상적인 파일에 바이러스를 붙인다. 하지만 그냥 둔다면 정상적인 프로그램만 돌고 끝난다. 그렇기 때문에 흐름을 바꿔야한다. os는 바이러스를 먼저 실행하게 해야 한다 하지만 씨언어는 이러한 흐름을 바꿀 수 없다. 어셈블리 언어는 이것이 가능하다 씨언어로는 분석이 어렵다. ⇒ 바이러스들을 분석하기 위한 기초 작업 바이러스는 다양한 언어(파이썬, 오랑지 등)으로 만들었다. 이에 기반이 되는 것이 어셈블리 언어이다. 진수 변환 어셈블리 언어 → 진수 변환 잘해..
Chap 1. System Software와 ISA System Software와 ISA System Software = Instruction Set Architecture(ISA)에 의존적인 소프트웨어 machine에 의존적인 성격 ↔ 대칭 개념 = “어플리케이션” cpu와 상관없이 사용자가 필요로 하는 일을 처리 운영체제(OS) = 컴퓨터 시스템의 자원 (HW와 SW)를 관리 [ ex ] MS windows, Linux 넓은 의미의 시스템 소프트웨어 운영체제 제작자는 그 운영체제가 사용될 ISA를 알고 있어야 한다. os 시스템 개발자라고 하더라도 ISA를 모두 알 필요는 없다. → 요즘은 씨언어를 통해 프로그래밍한다. 컴파일러 / 어셈블러 = 고급 언어로 작성한 프로그램을 ISA에 맞게 기계어로 변환 [ ex ] 씨언어로 작성 → 컴파일러를 통해 o..
Ch2. 알고리즘 2.1 알고리즘이란 : 문제를 해결하기 위한 단계적인 절차 또는 방법 입력이 주어지고 → 알고리즘 수행 → 결과 도출 알고리즘의 일반적 특성 입력이 존재 결과값이 존재(출력) 정확성문제 해결의 과정이 논리적이고 정확해야 한다. 주어진 입력에 대해 올바른 해를 주어야 함 수행성알고리즘에 모호한 표현(ambiguity)이 있다면 알고리즘을 프로그래밍을 할 수 없게 된다. 알고리즘의 각 단계는 컴퓨터에서 수행 가능 유한성제한된 개수의 명령 단계를 거쳐서 반드시 언젠가는 종료되어야 한다. 유한 시간 내에 종료되어야 한다. 효율성 문제 해결 과정이 비교했을 때 좀 더 효율적일수록 가치가 높다. 일반성 같은 타입의 문제가 들어온다면 해당 알고리즘을 항상 적용할 수 있어야 함 확장성함수의 특성과 비슷 동일한 입력이 ..
Ch 1. 알고리즘의 첫걸음 알고리즘의 유래 -“알콰리즈미”라는 사람의 이름으로부터 유래 -최초의 알고리즘 = 유클리드의 최대공약수 알고리즘 (몫과 나머지의 성격을 이용하여) 알고리즘이란? : 문제를 해결하기 위한 단계적인 절차 -효율적인 알고리즘 고안이 중요 = 최소한의 시간과 비용이 드는 것(시간 복잡도와 공간 복잡도를 최소화시키는 알고리즘) 알고리즘 기술 방법 -알고리즘이라는 것은 문제를 해결하는 방법을 고안하는 것뿐만 아니라 약속된 방법을 통해서 절차를 기술하는 것까지가 알고리즘이다. 기술 방법 = 자연어, flow chart, 의사코드 등 의사코드가 가장 일반적 (프로그래밍 코드와 매우 유사) 모든 문제를 그때 그때마다 구현까지 하려면 복잡한 문제는 구현하는데까지 드는 비용이 매우 높을 것이다. 그 전단계까지인 의사코드를 ..