Program
- 프로그램이란 실행이 가능한 파일을 지칭
Process
- 실행중인 파일을 지칭
결과적으로 프로그램을 실행하면 프로세스가 된다!
이 말은 보조 기억장치에 있던 파일이 주 기억장치에 올라오게 되면 프로그램이 -> 프로세스가 된다!
쉽게 작업관리자를 통해서 확인이 가능한대
여기서 실행한 파일이 별로 되지 않지만 프로세스가 95 개나 있는것은
보이지 않는 곳에서 실행중인 파일들 때문이다!
프로그램이 만들어지는 과정
이제 프로그램과 프로세스의 차이점을 공부해 보았으니
프로그램은 어떤식으로 만들어지는지 알아보자. 그래야 취약점을 분석하는대에 쉽게 이해가 될 수 있다.
Preprocessor
- '#' 으로 시작하는 define, inculde 등을 처리해주는 역할을 한다.
Compiler
- Preprocessor 가 완료된 파일을 Assembler 형식의 파일로 변경 시켜준다
Assembler
- Assembler 파일을 실행이 가능한 형식으로 변경시켜준다.
Linker
- 목적파일과 실행파일을 묶어 우리가 실행가능하는 파일로 만들어준다.
간단한 예제
일단 간단한 C 를 작성해보자
gcc 명령어를 통해서 컴파일을 해주는대
여기서 -save-temps 옵션을 주면 전처리,목적,어셈블 과정의 파일들을
볼수가 있다!
위와같이 각각의 파일들이 있는대
여기서 우리가 중요하게 보아야할 파일은
.o ( 어셈블리 파일 ) 이다.
이유는 앞으로 우리가 배워야할 시스템 취약점에서 분석해야 할 파일이기 때문
더 상위단계로 올라가는 것이 불가능하기 때문에 ( C로 작성된 원본 소스 )
objdump(역어셈블) 명령어를 통하여 어떤식으로 구조가 되어있는지 확인
00000000 <main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 68 00 00 00 00 push $0x0 8: e8 fc ff ff ff call 9 <main+0x9> d: 83 c4 04 add $0x4,%esp 10: 31 c0 xor %eax,%eax 12: eb 00 jmp 14 <main+0x14> 14: c9 leave 15: c3 ret offset binary(기계어) --->(니모닉) 어셈블러
이런식으로 구조가 되어있다.
* 니모닉 : 기계어를 사용자가 보기 좋은 방식으로 변경 ( 어셈블러 형식 )
그럼 위의 소스는 어디에 들어가 있을까?
프로그램은 섹션을 기준으로 나뉘게 되는대
1). text section : 실행코드 2). data section : 초기화된 데이터 영역 3). bss section : 비 초기화된 데이터 영역
이런식으로 나뉜다고 생각하면 된다.!
현재 이 프로그래밍에서는 data,bss 없기 때문에 현재는 들어있지 않지만
나중에 확인 해보도록 해보자.
그럼 위의 섹션에서 나온대로 확인해보면
text 섹션에
offset 40 부터 16바이트의 크기만큼 들어가있다라고 되어있다
위 의 55~c3 까지 정확하게 들어가 있는 것을 확인!
이런식으로 에셈블러 파일을 분석이 가능하다!
'System_Security' 카테고리의 다른 글
06. 프로세스 메모리 구조 (0) | 2017.07.26 |
---|---|
05. 분기문,반복문 (0) | 2017.07.24 |
04. 비트연산자 & 형변환 (0) | 2017.07.20 |
03. 어셈블리 사칙연산 (0) | 2017.07.19 |
02. 레지스트 개념 (0) | 2017.07.15 |
댓글