메모리 구조
프로그램의 실행은 먼저 그 프로그램이 메인 메모리에 로드되는 과정으로 시작된다. 이후 운영체제는 코드, 데이터, 스택, 힙 등 역할에 따라 구분된 메모리 영역을 구성하고, 각 영역은 상호작용을 통해 전체 프로그램의 실행 흐름을 담당한다. 메모리 공간(RAM)은 프로그램 실행 시 운영체제에 의해 다음과 같이 구분된다. ┌───────────────...
프로그램의 실행은 먼저 그 프로그램이 메인 메모리에 로드되는 과정으로 시작된다. 이후 운영체제는 코드, 데이터, 스택, 힙 등 역할에 따라 구분된 메모리 영역을 구성하고, 각 영역은 상호작용을 통해 전체 프로그램의 실행 흐름을 담당한다. 메모리 공간(RAM)은 프로그램 실행 시 운영체제에 의해 다음과 같이 구분된다. ┌───────────────...
서버에 접속하면 먼저 register_user()가 실행되며 username을 입력받는다. 그 후 메인 루프에서 print_menu() 함수가 호출되어 선택 가능한 메뉴가 출력된다. 각 기능은 다음과 같다. Register a new user → 새로운 유저를 등록하며 curr_user 구조체를 새로 할당하고 usern...
printf@GOT = 0x404008 buf 시작 주소 = 0x404080 buf = 0x404080 printf@GOT = 0x404008 차이: 0x404080 - 0x404008 = 0x78 = 120 bytes 배열 인덱싱은 타입 크기 단위로 계산됨 buf[0]의 타입은 unsigned long x86_64 ...
// gcc -o oneshot1 oneshot1.c -fno-stack-protector -fPIC -pie #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> void alarm_handler() { put...
Format String Bug (FSB) - GOT overwrite(공격 방법) format string 이란? %d, %s, %x, %c 등 %n(4byte), %hn(2byte) : store the length of print (지금까지 입력된 문자열의 개수 출력) FSB는 %n/%hn을 활용해야한다. (특정한 포인터나 값을 원하는 만...