분류 전체보기56 [3주차 TIL] KnockOn Bootcamp - ELF 파일 구조 ELF는 Linux 및 유닉스 계열 시스템에서 실행파일, 오브젝트 파일, 공유 라이브러리, 커널 모듈에 이르기까지 널리 사용되는 표준 이진 포맷입니다.리버서에게 있어 ELF 구조를 정확히 이해하는 것은 바이너리 해석, 후킹, 섹션 주입, Exploit 개발의 기초가 된다.📘ELF 구조 분석 – 리눅스 실행파일을 해부하다🔍 5.1 ELF란?ELF(Executable and Linkable Format)는 리눅스/유닉스 계열 운영체제에서 사용되는 실행파일 및 링크 가능 오브젝트 포맷이다.기본적인 목적은 OS가 파일을 쉽게 읽고 메모리에 적절히 맵핑하여 실행하거나 재사용할 수 있도록 설계된 구조다.ELF는 Windows의 PE(Portable Executable)와 같은 역할을 하며, 리버싱 시 PE와 함.. 2025. 4. 22. [3주차 TIL] KnockOn Bootcamp - 메모리 구조와 매핑 📘실행파일의 메모리 구조와 매핑 – 코드가 RAM 위에 올라가는 방식실행파일이 메모리에 어떻게 적재되고, 어떤 구역이 어떤 역할을 하는지를 알아야만스택 버퍼 오버플로우, 힙 조작, 코드 인젝션, 권한 우회 등 실전 익스플로잇이 가능해집니다.🔍 4.1 메모리 구조 개요프로그램이 실행되면 운영체제는 실행파일을 RAM의 특정 공간에 적재한다.이 메모리 공간은 아래처럼 여러 구역(섹션, Section)으로 나뉘어 있으며,각 구역은 서로 다른 목적과 보안 속성을 가진다.아래 그림은 메모리 구조의 전형적인 모습이다:📦 4.2 각 섹션의 구조와 역할🔹 Code Section (.text)역할: 프로그램의 기계어 명령어(코드)가 저장됨속성: 읽기 + 실행(Read + Execute), 쓰기 금지보안적 의미: S.. 2025. 4. 22. [3주차 TIL] KnockOn Bootcamp - 링커와 로더 📘링커와 로더 – 실행파일이 메모리에서 살아나는 과정🔍 3.1 링커(Linker)란?💡 개념"링커(linker)"는 컴파일된 목적 파일들(.o, .obj)을 하나의 실행 가능한 프로그램으로 결합해주는 툴이다.링커는 외부 참조를 해결하고, 코드나 데이터의 실제 메모리 주소를 할당해주며, 최종 실행파일을 생성한다.🔧 링커의 주요 역할심볼 이름 → 실제 주소 매핑라이브러리와 연결 (printf, malloc 등)코드/데이터 영역 구성 (.text, .data, .bss)재배치(Relocation) 처리🔍 3.1.1 동적 링킹 vs 정적 링킹 항목 정적 링킹 (Static) 동적 링킹 (Dynamic) 시점컴파일 시실행 시 (런타임)실행 파일 크기크다 (라이브러리 포함됨)작다 (라이브러리 분리됨)성.. 2025. 4. 22. [3주차 TIL] KnockOn Bootcamp - 컴파일러 📘 컴파일 과정의 내부 구조 – 소스코드에서 실행파일까지🔍 2.1 컴파일이란 무엇인가?C언어로 작성한 소스코드는 CPU가 이해하지 못한다.이 코드를 컴퓨터가 이해할 수 있는 **기계어 바이너리(executable)**로 바꾸는 과정이 바로 컴파일이다.이 과정은 한 단계로 끝나는 것이 아니라 총 4단계에 걸쳐 진행된다.🔧 2.2 컴파일 4단계 요약단계이름결과 파일 확장자역할1단계전처리(Preprocessing).i매크로, #include 처리2단계컴파일(Compilation).sC코드 → 어셈블리3단계어셈블(Assembling).o어셈블리 → 목적코드4단계링킹(Linking)없음 (.exe, .out)목적코드 + 라이브러리 결합🧪 실습 – gcc 명령어로 직접 확인해보기예시 파일: main.c#in.. 2025. 4. 22. [3주차 TIL] KnockOn Bootcamp - 아키텍쳐 📘 시스템 아키텍처와 바이너리 구조의 이해🔍 1.1 폰 노이만 구조란?🔧 개념폰 노이만 구조(𝑉𝑜𝑛 𝑁𝑒𝑢𝑚𝑎𝑛 𝐴𝑟𝑐ℎ𝑖𝑡𝑒𝑐𝑡𝑢𝑟𝑒)는 오늘날 대부분의 컴퓨터 시스템이 따르는 메모리 기반 명령 실행 모델이다.📦 핵심 요소구성 요소설명제어 장치명령어를 해석하고 제어 신호 생성연산 장치계산 및 논리 연산 수행 (ALU)메모리명령어와 데이터를 함께 저장입력/출력 장치외부와의 정보 송수신 담당프로그램 카운터다음 실행할 명령의 주소 저장⚠️ 리버싱 관점모든 명령어는 메모리에 저장되어 있고, CPU는 이를 순차적으로 읽어 해석한다.어셈블리 분석 시 프로그램 카운터(Instruction Pointer)가 다음 실행 위치를 의미함.💡 1.2 아키텍처란?**아키텍처(Arc.. 2025. 4. 22. [2,3주차 TIL] KnockOn Bootcamp - 프로젝트 만들기 포켓몬스터 대작전!프로그램이 시작되면, pokemon.txt 파일에서 모든 포켓몬 정보를 읽어와 구조체 연결리스트로 저장한다.모든 포켓몬은 적절한 구조체로 만들어져야 한다.포켓몬은 최소 10종류 이상 존재하여야 한다. ( 타입은 불, 물, 풀 3종류 )pokemon.txt 는 이름, 속성, 최소 공격력, 최소 HP로 이루어져 있다.pokemon.txt의 제일 첫 행에는 읽어야 할 라인 수가 적혀 있다.개발 조건각 기능과 구조체는 헤더파일을 이용해 구현해야 함.구조체는 꼭 malloc을 이용해 동적 heap메모리로 사용하여야 함. 구조체 멤버는 상관 X리눅스 환경 gcc컴파일러를 통해서 컴파일 및 실행이 되어야 함추가 점수자료구조를 사용할 것 2025. 4. 15. 이전 1 2 3 4 ··· 10 다음