-
달고나 문서 BOFsystem(pwnable)시스템(포너블)/BOF 2022. 9. 20. 19:18
오늘날의 시스템은 멀티태스킹을 하므로 그림처럼 여러개의 세그먼트가 저장될 수 있다.
하나의 세그먼트는 stack/data/code로 구성된다.
코드 세그먼트에는 컴파일러가 만들어낸 기계 컴파일러 코드가 들어있다.
컴파일 과정 중에는 코드가 저장될 정확한 메모리 주소를 알 수 없기 때문에, logical address를 사용한다(실제 주소는 offset(시작점) + logical address이 된다)
데이터 세그먼트에는 프로그램 실행 시에 필요한 데이터가 저장한다. 여기서 데이터는 전역변수를 말한다.
**data segment에는 initialized data segment(초기화 된 데이터 세그먼트)와 uninitialized data segment(초기화 되지 않은 데이터 세그먼트)가 있는데 segment .data는 전자, segment .bss는 후자를 가르킨다.
** rodata 영역은 주로 상수, 상수형 문자열, printf의 중괄호 부분이 들어간다.
즉, segment .data 에서는 초기값이 필요한 전역변수를 선언하고, segment .bss에서는 초기화가 필요없는 전역변수를 선언한다.스택 세그먼트에는 현재 수행 중인 작업 중에 쓰이는 데이터 영역으로 우리가 사용하는 버퍼가 자리잡고 있는 부분이다.
*SP(스택포인터) : 스택의 가장 윗부분을 가리킨다. 여기까지가 데이터가 채워진 영역이라는 의미이다.
*스택은 데이터가 추가될수록 주소값이 작아진다.
드림핵에서 퀴즈를 풀어보았다.