분류 전체보기 199

C++ Demangling (함수, 변수이름 심볼 인코딩 복원하기)

Demangling은 C++ 컴파일러가 함수나 변수 이름을 링크용 심볼로 인코딩한 것을 사람이 읽을 수 있는 원래 이름으로 복원하는 과정이다. C++은 함수 오버로딩, 네임스페이스, 클래스, 템플릿 같은 정보까지 심볼에 담아야 하므로, 예를 들어MyApp::Renderer::instance() 같은 이름이 바이너리에서는__ZN5MyApp8Renderer8instanceEv 처럼 mangling된다. 이 인코딩된 이름을 다시 원래 C++ 형태로 푸는 작업이 demangling이다.직접 해보면:echo "__ZZN5MyApp8Renderer8instanceEvE6object" | c++filt=> MyApp::Renderer::instance()::object 해석해보면:_ZN → namespace / c..

카테고리 없음 2026.04.10

Javascript worker와 blob(동적 코드 주입)

들어가며아래 코드를 이해해보자// 1. 워커에서 실행될 코드를 문자열로 정의 (템플릿 리터럴 활용)const workerCode = ` self.onmessage = function(e) { console.log('[Worker] Received data from main thread:', e.data); // 무거운 연산을 시뮬레이션 (메인 스레드 방해 없음) const result = e.data * e.data; // 결과를 다시 메인 스레드로 전송 self.postMessage(result); };`;// 2. 문자열을 Blob 객체로 변환 (타입은 반드시 javascript)const blob = new Blob([workerCode], { type:..

카테고리 없음 2026.03.31

MacOS(ARM, M1,M2..) 에서 UTM을 이용해 Ubuntu VM실행하기

1. UTM 설치QEMU 기반 VM을 GUI로 감싼 툴이라고 한다.무료이고 이게 압도적으로 편하다는 설이 많다.2. ubuntu server for arm iso 설치ubuntu server를 설치한 뒤 아래 명령어를 치면 ubuntu desktop처럼 사용할 수 있다 $ sudo apt update$ sudo apt install ubuntu-desktop$ sudo reboot 3. boot from next volume이후에 boot from next volume으로 접속하면 우분투 접속이 된다.

공부/이모저모 2026.03.19

Javascript의 객체와 prototype inheritance(프로토타입 기반 상속)

들어가며javascript 는 프로토타입 기반 객체지향 프로그래밍 언어이다.프로토타입이 뭘까? Prototype의 의미중복으로 사용되는 곳이 너무 많아 정리한다1. 일반 공학에서의 prototype : 최종 제품을 만들기 전에 만든 초기 시험 모델(시제품)2. C언어에서의 함수 prototype : 함수를 정의하기 전에 컴파일러에게 함수의 이름, 반환형, 매개변수 타입을 미리 알려주는 선언 3. javascript의 prototype : 객체가 다른 객체의 속성과 메서드를 상속받기 위해 연결하는 상위 객체 참조 이 글에서는 3번만 얘기할거니까 헷갈리지 말자표현을 정리하자면, 프로토타입 패턴이라는 것은 객체를 생성하는 방법을 다루는 디자인 패턴을 뜻한다. Javascript의 객체객체라 함은 메모리에 저장..

공부/JUN STUDY 2026.03.05

JavaScript Object Property Lookup이란 (자바 스크립트 객체가 property를 찾는 순서)

Javascript를 보면 위와 같은 충격적인 상황을 마주할 수 있다. 이것이 가능한 이유는 JavaScript는 모든 것이 객체이고 객체의 property를 찾을때 자바스크립트 엔진은 spec에 근거한 lookup 과정을 거치기 때문이다. 배열의 arr[index] 접근도 일반 객체의 property lookup과 같은 규칙을 따르기 때문이다. property lookup이라 함은 특정한 객체의 property를 찾는 과정을 의미하는데, 자바스크립트의 특정 객체 인스턴스의 property를 탐색하는 순서가 있다. 1. obj 자체에 property 있는지 확인2. 없으면 obj.[[Prototype]] 로 이동3. 거기서 property 찾기4. 계속 반복5. 끝까지 없으면 undefined이게 pr..

공부/JUN STUDY 2026.03.04

리눅스 권한 이제는 좀 이해하기 (Owner, Group, Other과 프로세스 권한 ruid, euid, suid 까지)

리눅스 권한을 이해할때 크게0. 권한은 파일(리눅스에서는 디렉터리도 파일이다)에 부여된다 1. 어떤 권한이 있는가 (rwx)2. 누구에게 그 권한이 있는가 (owner, group, other)개념을 이해하면 된다. 1번 rwx는 표현법만 익히면 되는거니 그냥 넘어가고owner, group, other 개념을 확실히 익혀보자. 바로 예제아래와 같이 파일들이 있다고 했을때 (ls -l로 확인가능하다)-r-------- 1 pwned pwned 69 flag-4a366de5f9250ee00973d579cd8a9e87-r-sr-x--- 1 pwned pwn 17552 flag_reader-2b6cfa9d53f87254b7c90bbd12d17ab6-rwxr-xr-x 1 root root 3..

공부/이모저모 2026.03.04

Type Casting과 Type Punning의 차이

Cast (형변환): "데이터의 의미를 유지하며 형태를 바꿈"Cast는 데이터를 다른 타입으로 바꾸되, 그 값(Value)의 의미가 유지되도록 비트를 재구성하는 과정동작: 컴퓨터가 CPU 연산을 통해 비트 패턴을 새로 만듬예시: 정수 1을 실수 1.0으로 캐스팅할 때.정수 1: 0x00000001실수 1.0: 0x3f800000 (IEEE 754 방식)=> 비트 패턴이 완전히 달라졌지만, 인간이 읽는 '값'은 여전히 1Punning (타입 퍼닝): "비트는 그대로 두고 해석만 바꿈"Punning은 메모리에 저장된 비트 패턴을 단 1비트도 건드리지 않고, 그것을 바라보는 타입만 바꿔서 읽는 기법동작: 추가적인 CPU 연산(번역) 없이, 메모리 주소에 있는 값을 그대로 가져와 다른 타입으로 우깁니다.예시: ..

VMware 에서 Ubuntu 디스크 용량 늘린 후에 적용하는법

Vmware나 Naver Cloud 등에서 Disk 크기를 조정한다Ubuntu Disk 용량 늘리기 -> Ubuntu 내부 Disk Setting 이용하면 가능!https://kysf.tistory.com/20 Ubuntu 디스크 용량 늘리는 방법STEP 1. VMware 설정에서 용량 확장1) 수정하고자 하는 machine의 설정 페이지에 들어간다."Edit virtual machine settings" 2) 현재 할당된 Hard Disk의 용량을 확인후, Expand 버튼을 클릭한다. 3) 늘리고자 하는 크kysf.tistory.com

공부/이모저모 2026.02.24

V8(d8) 빌드 및 gdb를 이용한 디버깅 방법

타겟 빌드V8 빌드 도구(depot_tools) 다운ninja나 관련된 모든 빌드 도구들이 depot_tools에 들어있다.git clone https://chromium.googlesource.com/chromium/tools/depot_tools.gitexport PATH=$PATH:$(pwd)/depot_toolsV8 소스코드 다운fetch v8cd v8# 특정 CVE가 수정되기 전의 특정 커밋으로 이동 (예: 2024년 3월 중순)git checkout 28877c5520gclient sync V8 빌드 (d8 쉘 생성)./tools/dev/gm.py x64.debug./tools/dev/gm.py x64.release V8 실행./out.gn/x64.release/d8 *.js# 혹은./out..

Configuration 2026.02.23