Security/Exploit

    GO runtime 해부 #0 Monkey Patching

    Go 프로그램 부트스트랩go 프로그램 시작 과정은 다음과 같다._rt0 (Entry Point) ↓_main ↓runtime.rt0_go (스케줄러 및 첫 고루틴 설정) ↓runtime.main ├→ runtime.init ├→ main.init └→ main.main (우리가 작성한 코드) ↓exit(0) 핵심 개념은 다음과 같다. 우리가 작성하는 main.main()은 진짜 시작점이 아님Go 런타임이 먼저 초기화 작업 수행:스케줄러 설정메모리 할당자 초기화GC 설정고루틴 스택 준비 진입점이 main 위에서 시작한다는 점이 중요하다. 진짜 시작점은 _rt0 이다. main()은 런타임 초기화의 끝 에 해당한다.이게 왜 중요할까 panic과 defer의 내부 구조panic은 함수가 아니다g..