본문 바로가기

stage22

[DreamHack] System Hacking Stage2 - Quiz: Linux Memory Layout #include int a = 0xa; const char b[] = "d_str"; int c; int foo(int arg){ int d = 0xd; return 0; } int main(){ int *e = malloc(sizeof(*e)); return 0; } 문제 1. e는 어느 세그먼트의 데이터를 가리키는가? 답: 힙 문제 2. foo가 위치하는 세그먼트는 어디인가? 답: 코드 문제 3. a가 위치하는 세그먼트는 어디인가? 답: 데이터 문제 4. b가 위치하는 세그먼트는 어디인가? 답: 읽기 전용 데이터 (rodata) 문제 5. c가 위치하는 세그먼트는 어디인가? 답: BSS 문제 6. "d_str"이 위치하는 세그먼트는 어디인가? 답: 읽기 전용 데이터 (rodata) 문제 7. d가 위.. 2022. 12. 19.
[DreamHack] System Hacking Stage2 - Background: Linux Memory Layout Lecture 세그먼트(Segment) - 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것 이다. - 리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트(코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 스택 세그먼트)로 나뉜다. 이렇게 나누는 이유? 각 용도에 맞게 적절한 권한을 부여할 수 있다는 장점이 있기 때문! 권한의 종류? 읽기, 쓰기, 실행 세 가지가 존재한다. CPU는 메모리에 대해 권한이 부여된 행위만 할 수 있다. 예를 들어.... 데이터 적재가 되는 곳에는 읽기 권한이 부여되고, 실행 대상이 아니기 때문에 실행 권한은 부여되지 않는다! 코드 세그먼트(Code Segment) - 실행 가능한 기계 코드가 위치하는 영역이다. - 다른 말로 텍스트 세그먼트(Text S.. 2022. 12. 19.
728x90