본문 바로가기
Study/Software Security

[소프트웨어보안] 컴퓨터의 구조 및 소프트웨어 실행 원리, C언어와 어셈블리어의 이해

by 8희 2022. 10. 19.

컴퓨터의 구조 및 소프트웨어 실행 원리

1. 언어 별 실행 환경의 차이

▶ Low-level programs은 메모리를 직접 다룬다.

▶ Low-level program의 장점: 효과적 / 정확한 제어 가능

▶ Low-level program의 단점: 데이터의 추상화원칙 위배 가능!

- 메모리의 임의 접근   
- 포인터 및 포인터 연산
- 안전한 메모리 사용 실패

 

2. 안전한 메모리 사용 방법

명확하게 지정된 메모리 영역만을 사용하도록 하기 위해 력하게 지켜져야 하는 규칙

- 다른 프로그램의 메모리 영역 절대 접근 불가
- 현재 함수의 접근가능 메모리 영역 외의 영역의 접근 통제

 

3. 컴퓨터의 구조 - 코드와 데이터

폰 노이만 모델 - 코드와 데이터를 동일 시 한다.

▶ 폰 노이만 컴퓨터 구조

- 해당 모델을 하드웨어 형태로 개발

- 컴퓨팅 환경의 혁명의 기폭제 (1950s - 1970s)

▶ 폰 노이만 컴퓨터 구조 문제점

- 데이터와 코드가 같은 경로를  사용

- 데이터와 코드의 경계가 불분  명해짐

- 코드가 스스로 갱신되는 것의  불안전성

 

4. C언어의 실행 원리

 

5. Java의 실행 원리

 

6. 프로세스와 메모리

프로세스: 실행 중인 프로그램 (OS의 관리)

 프로세스의 영역
- 코드 : 컴파일 프로그램 위치함
- 데이터 : 논리가 없는 프로그램의 변수들 위치함 / 전역변수/정적변/동적할당 메모리
- 스택 : 실행 중인 함수 위한 동적 메모리할당 공간 / 지역변수, 실행중인 객체의  주소, 리턴 주소

▶ 운영체제마다 메모리 보호의 정도가 다르다!

 


C언어와 어셈블리어의 이해

1. C언어와 어셈블리어 - C언어가 갖고 있는 여러 가지 이슈

Pointers to memory locations (&val, *ptr)

- 문자열의 길이가 가변적이고 NULL로 끝남

- 고정크기의 구조체(structs)에 값을 저장

- malloc() 활용한 동적 메모리 할당

▶ Function return code conventions

▶ 다음 에러에 대해 관대함

- type errors

- uninitialized variables

컴파일러에 따라 다른 반응(Strong Warning)

- 에러 마저도 다르게 나타남

- C 코드 내에 방어적 코딩이 되도록 조치

 

2. C 코드 샘플

 

3. 어셈블리어

가장 기본적인 컴퓨터 구조

- Processor

- Memory (휘밠어을 가진다)

- 외부 입력장치

- 이 셋을 연결해 주는 system bus

 

-> 우리가 알아야 할 건 CPU와 메모리 사이의 상호작용!

 

▶ 컴퓨터 구조 중 Memory는 피라미드 계층 구조를 갖고 있다!

- 용량

- 비용

- 속도 (지연, 대역폭)

 

▶ 컴퓨터 구조 중 프로세서의 레지스터

- CPU는 메모리에 있는 데이터를 레지스터에 임시로 저장한다.

 

* 범용 레지스터 용도

- AX: 누산 레지스터 또는 연산 레지스터. 계산에 주로 사용
- BX: 베이스 주소 레지스터. 메모리 주소 계산할 사용
- CX: 카운터 레지스터. 반복문에서 지금 번째로 반복하고 있는지를 기억할   사용
- DX: 데이터 레지스터. 계산의 결과 저장하거나 메모리에서 읽어온 데이  터를 저장
- SI: 소스 인덱스 레지스터(Source Index Register). 메모리 복사 등에서 원본  데이터의 주소를 저장
- DI: 목적지 인덱스 레지스터(Destination Index Register). 메모리 복사 등에서  목적지의 주소를 저장할 사용
- BP: 베이스 포인터 레지스터(Base Pointer Register). 스택 주소를 보존하는데  사용
- SP: 스택 포인터 레지스터(Stack Pointer Register). 현재의 스택 주소 저장
 
* 세그먼트 레지스터 용도
- CS: 현재 프로그램이 저장된 세그먼트의 주소
- DS: 현재 사용하는 데이터가 저장된 세그먼트의 주소
- ES: 별도의 용도는 없고 필요할 때마다 원하는 메모리 위치의 세그먼 주소를 저장
- SS: 스택이 있는 세그먼트의 주소가 저장
 
 
* 특수 레지스터 용도
 
- IP: 명령어 포인터 Instruction Pointer 레지스터 현재 수행할 명령어의 주소

- 플래그 레지스터: 프로세서의 상태