글
L2 Wireguard
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Wireguard 소개 wireguard는 VPN 프로토콜 중 하나로 필수적인 기능만 구현되어있어 기존 ipsec 등의 vpn보다 훨씬 단순하고 직관적이다. wireguard protocol 메세지 유형은 다음 4가지 뿐이다. (출처: https://www.wireguard.com/papers/wireguard.pdf ) 일반적인 흐름을 아주 단순화하면 Initiation -> Response -> Transport Data 다. 공격 방어가 필요한 경우 Cookie Reply 가 개입할 수 있는 구조다. 테스트 환경 구성 === office-gw === Arch: x86_64 OS: Debian 13 (trixie) Kernel: 6.12.107+deb13-amd64 WG tool: v1.0.20210914 === home-gw === Arch: aarch64 OS: Debian 12 (bookworm) Kernel: 6.12.95+deb12-arm64 WG tool: v1.0.20210914 === raspberrypi === Arch: aarch64 OS: Raspbian 12 (bookworm) Kernel: 6.18.33-v8+ WG tool: v1.0.20210914 === fedora === Arch: x86_64 OS: Fedora 43 (Workstation Edition) Kernel: 6.17.12-300.fc43.x86_64 WG tool: v1.0.20260223 L3 Wireguard 동작 확인 // office-gw root@office-gw:/home/suunj# ping -c 3 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.971 ms 64 bytes from 10.1.1.1: icmp_seq=2 tt...
Build My Own RV32 JIT Emulator
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
risc-v ISA를 위한 간단한 JIT 컴파일 기반 에뮬레이터를 만들었다. 초기 구현 범위는 기본 기능으로 한정하고 SIMD 같은 선택적 아키텍쳐 기능은 거의 포함하지 않았다. 이 에뮬레이터는 QEMU의 TCG(Tiny Code Generator) 소프트웨어 에뮬레이션이 원리상 어떻게 작동하는지 이해하기 위한 연습으로 작성했다. QEMU의 C 구현을 그대로 따라하지는 않았다. ISA 를 Native Code로 변환하기 에뮬레이션은 다음 단계로 수행된다. 1. ELF file의 program header를 읽어 guest 메모리에 배치한다. 2. guest pc에서 rv-32i 명령어를 읽고 x86_64 명령어로 변환한다. 3. 변환 블록으로 묶고 code cache에 저장한다. 4. 원본 pc와 변환된 코드의 pc 사이의 대응 관계를 address lookup table에 저장한다. 4. 생성한 x86_64 코드를 실행하고 다음 guest pc의 블록을 찾아 실행한다. 변환로직은 디코딩된 RV32 명령어의 종류에 따라 switch 문으로 분기하고, 해당 명령어와 동등한 동작을 수행하는 호스트 머신 코드를 직접 생성한다. 생성된 코드는 게스트 레지스터와 메모리를 읽고 갱신하여 원래 명령어의 동작을 재현한다. 변환 로직은 조건 플래그 같은 머신 상태도 적절히 갱신해야한다. Block Chaining 명령어들은 translation block 단위로 묶인다. 일반적으로 분기나 점프처럼 실행 흐름이 바뀌는 control plane 전 명령어까지 하나의 블록으로 구성되며 생성한 호스트 코드는 코드 캐시에 저장한다. 게스트 블록의 시작 주소와 호스트 코드의 시작 주소를 연결해 두면 같은 블록을 사시 실행할 때 디코딩과 코드 생성을 반복하지 않고 기존 코드를 재사용할 수 있다. 블록 진입 시에는 모든 risc-v 아키텍쳐 레지스터의 값을 JIT 변수로 불러온다. 이 부분을 prologue라고 한다. 블록 실행이 끝나면 다음 게스트 pc를 설...
Inside the CPU Part 3: Microarchitecture (실제 instruction은 CPU 내부에서 어떻게 흘러가는가?)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱