본문 바로가기

CS

(44)
Shell 스크립트_제어문과 함수 ✏️[ if~else 문 ] if [ 조건 ] -> 띄어쓰기 꼭! ifV[V조건V] then 참일 경우 실행 else 거짓인 경우 실행 fi ✔️ if 문의 조건 안에 들어갈 수 있는 것 조건 형태 ✔️ 파일과 관련된 조건 ✔️예시 01 #!/bin/sh 02 fname=/lib/systemd/ system/cron.service 03 if [ -f $fname ] -> 파일이 일반 파일이면 04 then 05 head -5 $fname -> 앞부분 5줄을 출력한다. 06 else 07 echo “cron 서버가 설치되지 않았습니다." 08 fi 09 exit 0 ✏️[ case~esac 문 ] if 문이 2중 분기라고 하며 case문은 다중 분기라고 한다. 그리고 끝에 세미콜론 2개 찍는다. ✔️예시 ..
Shell 스크립트_특징 [ shell ] 리눅스 운영체제에서 쉘은 사용자와 커널 사이에서 존재한다. 사용자가 원하는 명령어를 커널에 전하기 위해서는 쉘에서 사용하는 언어를 다룰 줄 알아야 한다. 쉘을 작동시키기 위해서 쉘 스크립트라는 언어를 사용한다. [ 우분투의 bash shell ] bash shell은 터미널이라고 생각하면 된다. 기본 셸은 bash(Bourne Again SHell : ‘배시 셸’) 주요 shell종류에는 bash shell, C shell, ksh 등이 있는데 리눅스의 표준 shell은 bash shell이다. [ bash 셸의 특징 ] (1) Alias 기능(명령어 단축 기능) = 단축명령어 (2) History 기능 = (위/아래 화살표키)를 누르면 이전에 입력한 명령어를 볼 수 있다. (3) 연산..
Chap 7. 프로세스_1 ✔️프로세스란 “실행중인 프로그램을 말한다” ✔️프로세스의 실행과정 (1) 프로세스가 실행되면 프로세스만의 독자적인 주소 공간이 생긴다(stack, data, code) (2) 이 프로세스가 CPU를 잡게 되면 PC라는 레지스터가 이 프로세스의 코드 어느 부분을 가리키고 있고 [stack, data, code] (3) 그러면 매순간 code부분에 있는 instruction을 하나씩 읽어서 CPU 안으로 불러들인다. (4) 레지스터 안에다가 어떠한 값을 넣고 산술 논리 연산 장치에서 연산을 하고 (5) 그 결과를 레지스터에 저장하거나 또는 메모리에다가 저장하는 식으로 진행을 하고 있다. - 이 과정을 반복하는데 특정 시점에 이 프로세스는 어디까지 와있는가를 규명하기 위해 필요한 요소로 “프로세스의 문맥”이..
Chap 6-3. 삽입 정렬(insertion sort) 삽입 정렬이란? 배열을 정렬된 부분(앞부분)과 정렬 안 된 부분 (뒷부분)으로 나누고, 정렬 안 된 부분의 가장 왼쪽 원소를 정렬된 부분의 적절한 위치에 삽입하여 정렬되도록 하는 과정을 반복 즉, 정렬 안 된 부분에서 하나씩 꺼내서 정렬된 부분에 있는 것들과 비교한다. 자신보다 작은 원소를 발견할 때까지 왼쪽 방향으로 이동한다. 자신보닥 작은 원소 바로 뒤에 삽입된다. → 정렬 안 된 부분의 원소가 정렬된 부분에 삽입되어 정렬된 부분의 그룹의 수가 1개 늘어나고, 정렬이 안 된 부분의 원소의 수는 1개 줄어든다. 결과= 이를 반복하여 수행하면, 마지막엔 정렬이 안 된 부분엔 아무 원소도 남지 않는다. + 모두가 정렬된 상태가 된다. 가정 = 정렬은 배열의 첫 번째 원소만이 정렬된 부분에 있는 상태에서 정..
Chap 6-2. 선택 정렬(selection sort) 선택 정렬이란? 입력 배열 전체에서 최솟값을 선택하여 배열의 0번 원소와 자리를 바꾸고, 다음엔 0번 원소를 제외한 나머지 원소에서 최솟값을 선택하여, 배열의 1번 원소와 자리를 바꾼다. -이러한 방식으로 마지막에 2개의 원소 중 작은 것을 선택하여 자리를 바꾼다. [의사코드] 입력: 크기가 n인 배열 A 출력: 정렬된 배열 A 1. for i = 0 to n-2 //n-1로 한다면 j = i+1 => j = n -1 +1 = n이 되므로 배열을 벗어난다. 2. min = i //최솟값의 인덱스 3. for j = i+1 to n-1 // A[i]~A[n-1]에서 최솟값을 찾는다. 4. if A[j] < A[min] 5. min = j //작은 부분으로 업데이트 하자 6. A[i] ↔ A[min] // ..
[ 윈도우 악성코드를 위한 기초 지식 ] 2 . 윈도우 프로그래밍 소스 코드 분석 윈도우 프로그래밍 소스 코드 분석 1.헤더 파일 #include #include //standard input, output = 입출력에 관한 헤더파일 1행 windows.h에는 (1) 함수 원형 = 수 많은 윈도우 API들이 선언되어 있다. (2) 기본적인 데이터 타입이 선언되어 있다. (HWMD, MSG, LPARAM 등이 있다) (3) 매크로 상수 등을 정의되어 있다. (4) 윈도우 프로그래밍에 필요한 보조 헤더 파일을 포함한다. ex) windows.h안에 winmem.h가 있어서 메모리 관련 된 헤더 파일이 안에 있다. 윈도우에서는 하나의 헤더 파일에 모든 API 함수들의 원형과 사용하는 상수들이 정의 특별한 경우에는 해당하는 헤더 파일을 포함(외부의 헤더파일 ) *표기법 = 헝가리언 표기법 2..
[ 윈도우 악성코드 분석을 위한 기초 지식 ] 1. 윈도우의 이해 먼저 간단하게 윈도우의 역사를 살펴보고 윈도우에 대한 특징을 살펴볼 것이다. [ 윈도우의 역사 ] 윈도우 1.0 • MS 1983년 11월 개발 시작 • 1985년 11월에 첫 버전 완성 (2년간 개발) • 멀티테스킹 및 GUI 지원 이전에 있던 MS DOS는 싱글 테스킹이었다. 윈도우 2.0 • 1987년 1.1 버전이 나온 뒤 같은 해 11월에 발표 • 윈도우 Overlapped 지원 (기존은 tiled) Overlapped = 창을 늘렸다가 줄였다가 할 수 있다. • 진정한 멀티테스킹 구현 (대신 많이 느려짐) 윈도우 3.0 • 1990년 3월 발표 (진정한 윈도우로 알려진 버전) • 매킨토시(화려한 GUI)를 많이 참조(거의 유사) 윈도우 3.1 • 1992년에 업데이트 (윈도우의 실질적인 첫 버..
Chap 6-1. 버블 정렬(Bubble Sort) 6.1 버블 정렬 = 인접한 2개의 레코드를 비교하여 순서대로 되어 있지 않으면 서로 교환한다. 즉, 두 개씩 비교해서 둘 중에 큰 숫자가 한 칸씩 뒤로 간다. – 작은 수는 배열의 앞부분으로 이동하는데, 배열을 좌우가 아니라 상하로 그려보면 정렬하는 과정에서 작은 수가 마치 거품처럼 위로 올라가는 것을 연상케 한다. [패스(pass)란? ] = 배열 전체를 근접한 2개씩 비교하여 큰 것이 뒤로 가게 하는 과정을 반복한다. 1 패스는 = 한 번 입력을 처음부터 끝까지 연속된 두 수를 비교하는 것을 말한다. 1 패스를 수행한 결과는 = 제일 큰 값이 제일 끝에 위치하게 된다. 1패스를 수행하여 제일 큰 값을 정렬하는 데 성공한 것이다. → 그러므로 제일 큰 수를 제외하고 나머지들끼리 다시 위의 과정을 반복..
Chap 6. 정렬 알고리즘(sort) [ 정렬이란? ] 정렬은 물건을 크기 순으로 오름차순이나 내림차순으로 나열하는 것이다. 방대한 양의 데이터를 쉽고 빠르게 정보를 찾기 위해 컴퓨터를 사용한다 이를 위한 기본적이고 중요한 알고리즘이 정렬이라고 할수 있다. [ 정렬의 기준 ] 정렬은 여러 가지 기준으로 나눌 수 있다. (1) “효율적이지만 구현이 어려움 vs 비효율적이지만 구현 쉬움” 예를 들어, 퀵 정렬은 효율적이고 빠르지만 구현이 어렵다. 반면, 버블 정렬은 구현이 쉽지만 비효율적인 방법이고 느리다. (2) “안정성을 보장하는가” 안정성은 중복된 key값이 있다면 상대적인 순서가 보장되는 것이다. 예를 들어, 버블 정렬은 같은 "5"라는 숫자도 상대적인 순서를 구분해준다. 즉, 앞에 있는 5와 뒤에 있는 5를 구별한다. 하지만, 삽입정렬..
Chap 5-3. 편집거리 (Edit Distance) [편집거리 (Edit Distance)] = 삽입 (insert), 삭제 (delete), 대체 (substitute) 연산을 사용하여 스트링(문자열) S를 수정하여 다른 스트링 T로 변환하고자 할 때 필요한 최소의 편집 연산 횟수 즉, 3개의 연산(삽입, 삭제, 대체)을 통해 다른 문자열로 변환이 가능하다. [예시 strong -> stone] strong을 stone으로 바꿔보자 2가지 방법이 가능하다. 방법 1 ) 순서대로 s, t는 그대로 두고 o를 삽입하고 r, o를 삭제한다. n은 그대로 두고 g를 e로 바꾼다. ⇒ 총 4회의 편집 연산을 했다. 방법 2) ‘s’와 ‘t’는 그대로 사용한 후, ‘r’을 삭제하고, ‘o’와 ‘n’을 그대로 사용한 후, ‘g’를 ‘e’로 대체하여, 총 2회의 편집..