2024. 1. 28. 01:26ㆍ시스템 해킹
세그먼트
; 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것
용도별로 메모리를 나누면 각 용도에 맞게 적절한 권한을 부여할 수 있다는 장점.
권한: 읽기, 쓰기, 실행
코드 세그먼트 (==텍스트 세그먼트)
; 실행 가능한 기계 코드가 위치하는 영역.
읽기/실행 권한.
쓰기 권한이 있으면 공격자가 악의적인 코드를 삽입하기 쉬워짐.
* 정수 31337을 반환하는 main함수가 컴파일 되면 554889e5b8697a00005dc3라는 기계 코드로 변환되는데, 이 기계 코드가 코드 세그먼트에 위치하게 됩니다.
int main() { return 31337; }
데이터 세그먼트
; 컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치.
읽기 권한+
-쓰기 가능한 세그먼트: 전역변수 처럼 실행되면서 가변가능한 데이터 => data 세그먼트
-쓰기 불가능한 세그먼트: 값이 변하면 안되는 데이터 => rodata(read-only data) 세그먼트
int data_num = 31337; // data
char data_rwstr[] = "writable_data"; // data
const char data_rostr[] = "readonly_data"; // rodata
char *str_ptr = "readonly"; // str_ptr은 data, 문자열은 rodata
int main() { ... }
BBS 세그먼트
; 컴파일 시점에 값이 정해지지 않은 전역 변수가 위치. 프로그램이 시작될 때, 모두 0으로 초기화됨.
읽기/쓰기 권한
int bss_data;
int main() {
printf("%d\n", bss_data); // 0
return 0;
}
스택 세그먼트
; 프로세스의 스택이 위치. 함수의 인자나 지역 변수와 같은 임시 변수들이 실행중 여기 저장됨.
읽기/쓰기 권한
* 스택 프레임이라는 단위로 사용됨. 함수가 호출될 때 생성, 반환될 때 해제.
## 유저가 입력한 choice에 따라 call_true()가 호출될 수도, call_false()가 호출될 수도 있음.
void func() {
int choice = 0; #변수 choice 스택에 저장
scanf("%d", &choice);
if (choice)
call_true();
else
call_false();
return 0;
}
∴ 프로세스가 얼마만큼의 스택 프레임을 사용하게 될 지 미리 계산하는 것 일반적으로 불가능. 작은 크기의 스택 세그먼트 먼저 할당. 부족할때마다 확장.
* 스택에 대해서 ‘아래로 자란다' 라는 표현을 종종 사용하는데, 이는 스택이 확장될 때, 기존 주소보다 낮은 주소로 확장되기 때문.
힙 세그먼트
; 힙 데이터가 위치. 실행중에 동적으로 할당 될 수 있음. 리눅스에서는 스택 세그먼트와 반대 방향으로 자람.
C언어에서 malloc(), calloc() 등을 호출해서 할당받는 메모리가 이 세그먼트에 위치.
읽기/쓰기 권한
int main() {
int *heap_data_ptr =
malloc(sizeof(*heap_data_ptr)); // 동적 할당한 힙 영역의 주소를 가리킴
*heap_data_ptr = 31337; // 힙 영역에 값을 씀
printf("%d\n", *heap_data_ptr); // 힙 영역의 값을 사용함
return 0;
}
#include <stdlib.h>
int a = 0xa; #a:데이터
const char b[] = "d_str"; #b, "d_str":rodata
int c; #c:BSS
int foo(int arg) { #foo:코드
int d = 0xd; #d:스택
return 0;
}
int main()
{
int *e = malloc(sizeof(*e));#e:힙
return 0;
}
'시스템 해킹' 카테고리의 다른 글
[프로젝트] AI를 활용한 악성코드 분류기_트로이 목마란 (0) | 2024.02.24 |
---|---|
[C언어] 스택(POP, PUSH, PEEK 구현), 레지스터, 스택프레임 (1) | 2024.02.12 |
[시스템 해킹] 02-2. Computer Science-x86 Assembly (0) | 2024.01.28 |
[시스템 해킹] 02. Computer Science-Computer Architecture (0) | 2024.01.28 |
[시스템 해킹] 01. 리눅스 환경 구축 (0) | 2024.01.27 |