ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [System Security] 4.1 리눅스 프로세스 주소공간
    Security/System Security 2021. 4. 5. 16:02

    프로세스의 구조

     

    변수 종류별 주소공간

    - 초기화된 전역 변수 : .data

    - 초기화되지 않은 전역 변수 : .bss

    - 초기화되지 않은 로컬 변수 : .data

    - 초기화된 로컬 변수 : stack

    - 초기화되지 않은 static 로컬변수 : .data

    - 초기화된 static 로컬변수 : .bss

     

    static 변수의 특징

    static 로컬 변수 : 외부 파일에서 참조할 수 없다

    static 전역 변수 : 한 번 생성되면 프로그램이 종료될 때 없어진다. 

    배열 주소공간

    global_char_arr_1 : 초기화되지 않은 전역변수 (.bss)

    global_char_arr_2 : 초기화된 전역변수 (.data)

    local_char_arr_1 : 초기화되지 않은 로컬변수 (stack)

    local_char_arr_2 : 초기화된 로컬변수 (stack)

    문자열 주소공간 확인

    Hi, Array : Write가 불가능한 객체이므로 .rodata에 저장됨

    My : 초기화된 전역변수, 초기화시 입력된다 (.data)

    World :  초기화된 지역변수, text에 인코딩되어 저장된다. main 실행시 text에서 stack으로 가져온다

     

     

    포인터 주소공간

    global_char_ptr_1 : 초기화하지 않은 전역변수 (.bss)

    global_char_ptr_2 : 초기화한 전역변수 (.data)

    local_char_ptr_1 : 초기화하지 않은 지역변수 (stack)

    local_char_ptr_2 : 초기화한 지역변수 (stack)

     

    문자열 주소공간

    My, World! : .rodata에 위치

    Hi, Pointer : .rodata에 위치하다가 Heap으로 복사

    #include<stdio.h>
    
    int global_num_1;
    int global_num_2 = 100;
    static int global_num3;
    static int global_num4 = 200;
    char global_char_arr_1[10];
    char global_char_arr_2[] = "My";
    char *global_char_ptr_1;
    char *global_char_ptr_2 = "My2";
    
    int main() {
    	int local_num_1;
    	int local_num_2 = 300;
    	static int local_num3;
    	static int local_num4 = 400;
    	char local_char_arr_1[10];
    	char local_char_arr_2[] = "My3";
    	char* local_char_ptr_1;
    	char* local_char_ptr_2 = "My4";
    
    	return 0;
    }
    
    
    /*
    	My : .data
    	My2 : .rodata
    	My3 : .text에 인코딩되어 있다가 디코딩되어 stack에 저장
    	My4 : .rodata에 존재
    
    	global_num_1 : .bss
    	global_num_2 : .data
    	global_num_3 : .bss
    	global_num_4 : .data
    	global_char_arr_1 : .bss
    	global_char_arr_2 : .data
    	global_char_ptr_1 : .bss
    	global_char_ptr_2 : .data, .rodata에 있는 My2의 주소값을 가진다
    	
    	local_num_1 : stack
    	local_num_2 : stack
    	local_num_3 : .bss
    	local_num_4 : .data
    	local_char_arr_1 : stack
    	local_char_arr_2 : stack
    	local_char_ptr_1 : stack
    	local_char_ptr_2 : stack
    */
Designed by Tistory.