전체 글

전체 글

    ARM 어셈블리 기초 #2 데이터 타입과 레지스터

    데이터 타입 (Data Types)ARM은 다양한 크기의 데이터를 다룰 수 있다TypeSizeExtensionWord32비트 (4바이트)없음Half Word16비트 (2바이트)-h, -shByte8비트 (1바이트)-b, -sbSigned vs Unsigned:Signed (부호 있음): 양수/음수 모두 표현 가능, 범위가 좁음Unsigned (부호 없음): 양수와 0만 표현, 범위가 넓음Load/Store 명령어 예시ldr = Load Word (32비트)ldrh = Load unsigned Half Wordldrsh = Load signed Half Wordldrb = Load unsigned Byteldrsb = Load signed Bytestr = Store Wordstrh = Sto..

    ARM 어셈블리 기초 #1 Overview

    ARM vs Intel 프로세서구분Intel(CISC)ARM(RISC)철학Complex Instruction SetReduced Instruction Set명령어 수많고 복잡함적고 단순함 (100개 이하)레지스터적음많음메모리 접근명령어가 직접 메모리 접근 가능Load/Store 모델 (레지스터만 연산)용도PC, 워크스테이션, 서버모바일, 임베디드, IoT ARM의 Load/Store 모델 예시: 메모리의 32비트 값을 증가시키려면:Load: 메모리 → 레지스터로 값 로드Increment: 레지스터에서 값 증가Store: 레지스터 → 메모리로 저장기타 차이점:ARM은 대부분의 명령어에서 조건부 실행 가능Intel은 리틀 엔디안, ARM v3 이후는 바이 엔디안 (전환 가능)ARM에는 ARM 모드와 Thum..

    RISC-V #1 Overview

    History of RISC-V: The Free and Open ISARISC-V는 RISC 원칙을 기반으로 하는 개방형 표준 명령어 세트 아키텍처(ISA)를 의미한다. RISC는 Reduced Instruction Set Computer의 약자로, 1980년대 초에 당시의 마이크로프로세서인 Complex Instruction Set Computer(CISC)와는 대조적으로 단순성을 추구하며 제안된 컴퓨터 아키텍처이다.CISC (Complex Instruction Set Computer)1980년대 이전 주류 방식적은 레지스터, 많은 명령어대부분의 명령어가 메모리에 직접 접근 가능상업적 이해관계에 의해 발전RISC (Reduced Instruction Set Computer)1980년대 초 학계에서 제..

    Compiler 개발 #1 컴파일러 동작 원리

    컴파일러란컴파일러: 소스 언어 → 타겟 언어로 번역하는 프로그램┌──────────────┐ ┌──────────────┐ ┌──────────────┐│ Source Code │ ──▶ │ Compiler │ ──▶ │ Target Code ││ (C, Java) │ │ │ │ (기계어/어셈블리)│└──────────────┘ └──────────────┘ └──────────────┘ 인터프리터와의 차이구분컴파일러인터프리터동작전체 번역 후 실행한 줄씩 즉시 실행속도실행 빠름 ✅실행 느림디버깅에러 위치 파악 어려움에러 진단 쉬움 ✅예시C, C++, GoPython, Ruby 컴파일러 구조두 부분으로 나뉨Analysis (..

    syzbot 버그 패치 리뷰 (2025.12.18)

    divide error in ocfs2_block_group_fill (3)error type: Divide-by-zeroocfs2는 Oracle Cluster File System 2로, 파일시스템bpc는 Blocks Per Cluster클러스터 크기 = 64KB = 2^16 → s_clustersize_bits = 16블록 크기 = 4KB = 2^12 → s_blocksize_bits = 12expected_bpc = 1 하나의 클러스터 안에 16개 블록이 있다는 뜻block은 디스크 I/O의 최소 단위cluster는 파일시스템이 파일 공간을 할당하는 단위원인: 입력값 검증 누락으로 0으로 나누기 발생 option from the mount to silence this warning.=..

    ARM Architecture 구조와 원리 #2 레지스터

    레지스터란?레지스터 = CPU의 변수CPU는 메모리에서 직접 연산할 수 없고, 반드시 레지스터에 데이터를 로드한 후 연산한다.프로그래밍에서 변수가 데이터를 임시 저장하듯이, 레지스터는 CPU가 직접 사용하는 초고속 저장 공간이다.// C 언어에서의 변수int a = 10;int b = 20;int c = a + b; // 메모리에서 연산// CPU 내부에서 실제로 일어나는 일 (어셈블리)// R0, R1, R2가 레지스터 (CPU의 변수)MOV R0, #10 // R0 = 10MOV R1, #20 // R1 = 20ADD R2, R0, R1 // R2 = R0 + R1 = 30왜 레지스터가 필요한가?저장소접근 속도용량비용레지스터~1 사이클수십 개 (바이트)최고캐시 (L1)~4 사이..

    CVE-2009-3895, CVE-2012-2836 - Heap-based Buffer Overflow 취약점

    취약점 개요CVE-2009-3895, CVE-2012-2836 는 libexif 라이브러리 버전 0.6.14에서 발견된 힙 기반 버퍼 오버플로우(Heap-based Buffer Overflow) 취약점이다. 환경 구성퍼징할 libexif-0.6.14를 다운로드하고 압축을 해제 후 빌드한다.wget https://github.com/libexif/libexif/archive/refs/tags/libexif-0_6_14-release.tar.gztar -xzvf libexif-0_6_14-release.tar.gzcd libexif-libexif-0_6_14-release/autoreconf -fvi./configure --enable-shared=no --prefix="$(pwd)/install/"ma..

    CVE-2020-27786 - race condition 기반 Use-After-Free 취약점

    ALSA rawmidi 드라이버에서 copy_from_user() 수행 중 lock이 해제되는 틈에 다른 스레드가 ioctl로 버퍼를 해제할 수 있는 race condition 기반 Use-After-Free 취약점 Referenceshttps://www.hacktivesecurity.com/blog/2022/06/13/linux-kernel-exploit-development-1day-case-study/https://github.com/kiks7/CVE-2020-27786-Kernel-Exploitfdsf

    syzbot, qemu, gdb를 사용하여 linux kernel의 버그 수정

    공개된 Syzbot 버그를 통해 보고서부터 시작하여 제공된 환경을 사용하여 원래 충돌을 확인하고 영향을 받는 커널 버전을 로컬에서 다시 빌드한 다음, 상위 버전 수정 사항을 적용한 후 문제가 해결되었는지 확인하는 절차를 알아보자.목표는 근본 원인을 추적하거나 패치하는 것이 아니다. 버그를 로컬 환경에서 실행하여 수정 전후의 상태를 확인하는 것이다. Linux Kernel 공개 버그리눅스 커널에서 공개된 버그를 찾는 방법은 여러가지 이다.BugZillaSyzbotSyzkaller-bugsChangelogsGit log BugZillaBugZilla는 리눅스 커널의 버그를 보고하는 표준적인 방법이다. subsystem 별로 정리된 흥미로운 취약점(예: IPv4 및 IPv6 네트워킹, ext* 파일 시스템 등..