Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
windbg-decompile-ext — 실시간 함수를 디스어셈블하고 LLM을 사용하여 검증된 의사 코드를 생성하는 WinDbg x64 확장 프로그램. | Kitploit
도구/GitHubGitHub/kernullist/windbg-decompile-ext
Static AnalysisDynamic Analysis (Sandboxing)Code AnalysisReverse EngineeringDebuggersMalware AnalysisBinary AnalysisLearning & EducationAI-Assisted ReversingFirmware AnalysisBinary Exploitation
1121172개월 전Kitploit 검토 완료
GitHub
kernullist/windbg-decompile-ext

windbg-decompile-ext

실시간 함수를 디스어셈블하고 LLM을 사용하여 검증된 의사 코드를 생성하는 WinDbg x64 확장 프로그램.

저장소 보기

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

LLM을 통한 Windbg 디컴파일 확장

native decompile viewer

screenshot

이 프로젝트는 함수를 이름이나 주소로 확인하고, 결정론적 제어 흐름 뷰를 재구성하며, 확장에서 직접 LLM에 물어 의사 코드를 생성하는 Windows x64 WinDbg 확장 스켈레톤입니다.

레이아웃

  • src/extension: WinDbg 확장 DLL 및 !decomp 명령.
  • src/shared: 확장에서 공유하는 JSON, 분석기, 프로토콜 및 검증기 코드.
  • scripts: 빌드 및 벤더 복사 도우미.
  • third_party/dbgeng: 선택적 벤더된 dbgeng.h 및 dbgeng.lib 복사본.
  • third_party/zydis: 기본적으로 제공되는 벤더된 안정적인 Zydis 소스 트리.
  • 현재 범위

    • x64 전용 가정
    • DbgEng를 통한 실시간 메모리 분석
    • 안정적인 니모닉/피연산자 복구를 위한 Zydis 기반 구조적 디스어셈블리
    • 심볼 영역, 언와인드 및 휴리스틱 함수 범위 복구
    • 들어오는 레지스터 인수, 스택 슬롯 로컬, 병합 후보 및 정규화된 분기 조건에 대한 SSA-Lite 스타일 복구
    • 정의-사용 힌트, 정규화된 복사/상수 표현식 및 죽은 정의 마커를 포함한 저수준 IR 값 사실
    • 레지스터 및 스택 로컬 전반에 걸쳐 수렴된 live-in/live-out 도달 정의를 위한 블록 수준 값 상태 사실
    • 자연 루프, if/else 후보, switch 후보, 루프 유도 메타데이터 및 switch 범위/기본 메타데이터에 대한 도미네이터 기반 제어 흐름 영역 사실
    • 섀도/홈 슬롯, 스택 포인터 델타, 프롤로그/에필로그 인식, no-return 호출, 테일 콜, 썽크, 임포트 래퍼 후보 및 복구된 레지스터/스택 호출 인수를 위한 x64 ABI 사실
    • 잘못된 들어오는 인수를 피하기 위한 벡터 제로 이디엄 가드와 함께 xmm0부터 xmm3까지의 SIMD/FP 인식 Microsoft x64 인수 복구
    • 포인터 유사 값, 스택 로컬, 필드 오프셋, 스케일드 인덱스 배열, 열거형 유사 비교, 비트플래그 테스트 및 vtable 후보에 대한 타입 복구 힌트
    • 메모리/문자열 도우미, 보안 쿠키, 스택 프로브, 할당자, 집계 초기화자 및 RIP-상대 전역/임포트 로드에 대한 이디엄 및 라이브러리 패턴 사실
    • 직접 호출, 레지스터/메모리 간접 호출, 가상 호출/vtable 오프셋 후보, 반환 타입, 매개변수 모델, 부작용, 메모리 효과, 소유권 힌트 및 신뢰도에 대한 호출 대상 사실
    • 제어 흐름 평탄화 디스패처, 복구된 의미론적 엣지, 불투명 조건부 데드 엣지 및 스칼라 명령어 대체 이디엄에 대한 OLLVM 스타일 난독화 사실
    • 난독 해제 준비 사실 및 복구된 난독화 사실이 유사 C 재작성을 안내할 수 있는지 여부에 대한 /deobf:on|off 제어
    • 고신호 분석기, PDB 및 관찰된 동작 사실을 명령어/블록 근거로 연결하는 증거 그래프 사실
    • 분석기 생성 의사 코드 스켈레톤, CFG 영역, 조건 및 중요한 블록에 대한 그래프 인식 요약, 순위가 지정된 고신호 사실 선택 및 대규모 사실 집합에 대한 확산 샘플링을 사용한 refine-first 프롬프팅
    • 출력 콜백이 DML을 지원할 때 엔트리/기본 블록/증거/호출 대상 탐색을 위한 WinDbg DML 링크
    • 간략, 증거 설명, 사실 전용, 디버그 프롬프트, JSON 및 데이터 모델 스타일 출력을 위한 분리된 결과 모드
    • no-return, 타입, 필드 및 이름 바꾸기 힌트에 대한 사용자 수정 스위치
    • 라이브, 덤프, 커널 및 TTD 유사 세션에 대한 세션 인식 분석 정책 사실
    • 현재 디버거 컨텍스트에서 관찰된 동작 사실(가능한 경우 레지스터 인수 샘플, 메모리 핫스팟 및 TTD 쿼리 제안 포함)
    • LLM 프롬프팅을 위한 RIP 상대 문자열/전역/IAT 분류 및 호출 대상 시그니처 힌트
    • LLM 프롬프팅을 위한 로드된 PDB 인식 프로토타입, 범위 지정 매개변수/로컬, 필드, 열거형 및 소스 라인 힌트
    • 확장에서 직접 인프로세스 LLM 호출
    • OpenAI 호환 HTTP 어댑터 또는 결정론적 모의 폴백
    • LLM 출력에 대한 검증기 패스

    WinDbg 사용법

    빌드 출력에서 확장을 로드한 다음, 심볼 또는 주소에 대해 !decomp를 실행합니다:```text .load C:\path\to\decomp.dll !decomp /doctor !decomp module!FunctionName !decomp 0x7ffb`12345678

    root@kitploit:~
    설정이 잘못된 것 같거나 LLM 제공자를 활성화하기 전에 `/doctor`를 사용하세요:```text
    !decomp /doctor
    !decomp /doctor:net
    
    • /doctor는 대상(target)이 필요하지 않으며 공급자(provider)를 호출하지 않습니다. 설정 경로/로드 상태, 공급자/모델/엔드포인트 요약, 비밀(secret) 없이 인증(auth) 존재 여부, 타임아웃/토큰/청크(chunking) 설정, DML 지원, 세션 클래스/한정자(qualifier), 프로세서 유형 및 PDB 주의사항을 보고합니다.
    • /doctor:net은 명시적인 네트워크 확인 요청으로 허용되지만, 현재 공급자 핑(ping)이 생략되었다고 보고합니다. 확장 프로그램은 닥터 모드에서 네트워크 프로브(probe)를 수행하지 않습니다.
    • API 키, 베어러 토큰(bearer token), 리프레시 토큰(refresh token), URL 쿼리 문자열과 같은 비밀 값은 출력되지 않습니다.

    대상(target)은 공개/비공개 심볼(symbol), 내보낸 함수 이름 또는 주소(address)가 될 수 있습니다. 대상이 함수 내부의 주소로 확인되는 경우, 확장 프로그램은 심볼, 되감기(unwind) 데이터 및 제어 흐름 휴리스틱(heuristic)에서 포함하는 함수 범위를 복구하려고 시도합니다. 공백이 포함된 대상은 따옴표로 묶습니다:```text !decomp "my module!Function With Spaces"

    root@kitploit:~
    일반적인 명령 경로는 로컬 분석을 수행하고, 분석기 사실을 구축하며, 선택적으로 구성된 LLM 엔드포인트를 호출하고, 복구된 증거에 대해 응답을 검증한 후, 의사 C 코드와 신뢰도, 경고 및 불확실성 메모를 출력합니다:```text
    !decomp ntdll!RtlAllocateHeap
    !decomp kernel32!Sleep
    !decomp game.exe!CheckIntegrity
    

    Normal, brief, explain 출력에는 /verbose 없이도 간결한 진행 상황 스트림이 포함됩니다. 긴 LLM 실행에서는 로컬 분석 완료, 청크 진행 상황, 재시도 알림, 병합 시작, 검증 및 Ctrl+Break 취소 힌트가 표시됩니다. /view:json, /view:facts, /view:prompt, /view:data와 같은 기계 판독 가능 모드는 진행 줄과 DML 도우미 링크를 생략하여 스크립트가 요청된 페이로드만 수신하도록 합니다.

    /view:*를 사용하여 보고 싶은 내용을 선택하세요. 이렇게 하면 명령어 표면이 작게 유지됩니다. 하나의 옵션으로 모든 출력 모드를 제어할 수 있습니다.```text !decomp /view:brief module!HotPath !decomp /view:explain module!BranchyFunction !decomp /view:json module!FunctionName !decomp /view:facts module!FunctionName !decomp /view:prompt module!FunctionName !decomp /view:data module!FunctionName !decomp /view:analyzer module!FunctionName !decomp /view:plan module!FunctionName

    root@kitploit:~
    - `brief`는 대상, 신뢰도, 요약, 그리고 첫 번째 불확실성 또는 검증 경고를 출력합니다.
    - `explain`은 증거, 제어 흐름, 타입 힌트, 관찰된 동작, 호출 대상 섹션을 추가합니다.
    - `json`은 기계가 읽을 수 있는 요청 및 응답 JSON을 출력합니다.
    - `facts`는 분석기 사실만 출력하고 LLM 경로를 비활성화합니다.
    - `prompt`는 정확한 시스템 프롬프트, 사용자 프롬프트 및 프롬프트 사실을 출력합니다. LLM 호출을 비활성화합니다.
    - `data`는 WinDbg JavaScript/NatVis 스타일 자동화에 사용하기 위한 안정적인 JSON 스냅샷을 출력합니다.
    - `analyzer`는 LLM을 호출하지 않고 결정론적 분석기 전용 의사 코드 경로를 렌더링합니다.
    - `plan`은 LLM을 호출하거나 결과 캐시를 업데이트하지 않고 로컬 분석을 수행하고 사전 점검 계획을 출력합니다. 대상/모듈/범위 개수, PDB 가용성, 세션 정책, 예상 청킹, 프롬프트 크기 관련 개수 및 실용적 권장 사항을 포함합니다.
    
    명령이 멈춘 것처럼 보이거나 전체 진행 스트림을 보려면 `/verbose`를 사용하세요.```text
    !decomp /verbose module!SlowFunction
    !decomp /verbose /view:json module!SlowFunction
    
    • /verbose는 대상 확인, 함수 범위 복구, 바이트 읽기, 디스어셈블리, 분석기 사실 구성, PDB/세션 강화, 의사 코드 토큰화, 검증기 결과와 같은 로컬 단계를 출력합니다.
    • LLM 모드에서 /verbose는 프롬프트 크기, 요청 토큰 예산, HTTP 연결/전송/수신 단계, 응답 청크 크기, 완료 이유, 추출된 모델 JSON 미리보기, 재시도 횟수 및 검증기 피드백 재시도 결정을 출력합니다.
    • API 키는 출력되지 않습니다. 요청/응답 로그는 전체 헤더나 전체 프롬프트 본문 대신 크기와 짧은 미리보기를 표시합니다.
    • /verbose는 간결한 진행 스트림을 전체 추적으로 대체합니다. 간결한 진행 줄로 시간이 어디에 소비되는지 진단하기에 충분하지 않을 때 사용하십시오.
    • 장기 실행 !decomp 명령 중 WinDbg에서 Ctrl+Break를 눌러 취소를 요청하십시오. 확장 프로그램은 로컬 분석 단계 사이 및 LLM 작업자를 기다리는 동안 인터럽트를 확인한 다음 활성 동기 HTTP I/O에 중지를 요청합니다.

    /brief, /explain, /json, /facts-only, /debug-prompt, /data-model, /dx, /no-llm과 같은 레거시 별칭은 여전히 이전 스크립트에서 작동하지만, 새 예제에서는 /view:*를 사용합니다.

    Window viewer:```text !decomp /view:window module!FunctionName !decomp /view:window /view:explain module!FunctionName

    root@kitploit:~
    - `/view:window`는 대상에 대해 일반적인 `!decomp` 결과 경로를 실행하고, 전체 렌더링된 결과를 별도의 뷰어에서 엽니다.
    - 뷰어는 콘솔 경로와 동일한 응답 렌더러를 사용한 후, 디버거 창이 발견될 경우 그 창이 소유하는 네이티브 Win32 모덜리스 도구 창을 엽니다.
    - 디버거 출력은 네이티브 뷰어 창 핸들을 보고합니다. 뷰어 창을 생성할 수 없으면 명령이 경고를 출력하고 일반 콘솔 결과로 대체됩니다.
    - DML 전용 링크는 뷰어에서 명령 문자열과 함께 텍스트 레이블로 렌더링됩니다. RichEdit을 사용할 수 있는 경우 창은 섹션 제목, 메타데이터 스타일링 및 의사 코드 강조를 포함한 GitHub 스타일의 RTF 레이아웃을 사용하며, 그렇지 않으면 일반 텍스트로 대체됩니다.
    - 현재 세션에 이전에 캐시된 결과가 있는 경우 뷰어는 왼쪽에 기록 목록을 표시하여 분석을 다시 실행하지 않고도 현재 출력과 이전 디컴파일 결과 간에 전환할 수 있습니다.
    - `/view:json`, `/view:facts`, `/view:prompt`, `/view:data`는 기계가 읽을 수 있는 콘솔 출력으로 유지되며 뷰어로 리디렉션되지 않습니다.```text
    !decomp /limit:deep module!LargeFunction
    !decomp /limit:huge module!VeryLargeFunction
    !decomp /limit:12000 module!VeryLargeFunction
    !decomp /timeout:120000 module!SlowFunction
    
    • /limit:deep 명령어 상한을 8192로 올립니다.
    • /limit:huge 명령어 상한을 16384로 올립니다.
    • /limit:N 명령어 상한을 명시적으로 설정합니다.
    • /timeout:MS 이 호출에 대한 요청 시간 제한을 재정의합니다.
    • LLM 청킹은 decomp.llm.json에 의해 제어됩니다. 명령줄 명령어 상한은 확장 프로그램이 프롬프트 전에 복구를 시도하는 로컬 코드의 양을 제어합니다.
    • 레거시 /deep, /huge, /maxinsn:N은 계속 지원됩니다.

    난독화 인식 디컴파일:```text !decomp /deobf:on module!FlattenedFunction !decomp /deobf:off module!FlattenedFunction !decomp /view:facts /deobf:off module!FlattenedFunction

    root@kitploit:~
    - `/deobf:on`이 기본값입니다. 분석기는 여전히 원시 사실을 출력하지만, 높은 신뢰도의 OLLVM 스타일 디스패처 복구, 불투명한 데드 엣지 증명, 대체 관용구, 의미론적 CFG 오버레이가 프롬프트 사실, 병합 정책, 검증기 충돌 정책, 구조화된 의사 C 복구를 안내할 수 있습니다.
    - `/deobf:off`는 `obfuscation`, `semantic_control_flow`, `deobfuscation_readiness` 사실을 계속 표시하지만, 재작성 안전 동작을 비활성화하고, 제어 흐름 구조화를 원시 CFG에 유지하며, 프롬프트/병합/검증기 경로가 원시 난독화된 형태를 보존하도록 지시합니다.
    - 디스패처, 가짜 분기(bogus branch) 또는 대체 표면을 확장 프로그램에 요청하지 않고 직접 검사하려면 `/deobf:off`를 사용하세요.
    - `/deobfuscation:on|off`는 더 긴 별칭으로 허용됩니다.
    
    캐시 및 재생 도우미:```text
    !decomp /view:json module!FunctionName
    !decomp /last:json
    !decomp /view:explain module!FunctionName
    !decomp /last:explain
    !decomp /view:facts module!FunctionName
    !decomp /last:facts
    !decomp /view:data module!FunctionName
    !decomp /last:data
    !decomp /view:prompt module!FunctionName
    !decomp /last:prompt
    !decomp /history
    !decomp /refresh module!FunctionName
    !decomp /last:2:explain
    !decomp /last:2:json
    
    • /last:json 은 재분석 없이 이전 요청/응답 JSON을 출력합니다.
    • /last:explain 은 재분석이나 LLM 호출 없이 이전 전체 결과를 설명 섹션과 함께 다시 렌더링합니다.
    • /last:facts 는 재분석 없이 이전 결과에서 분석기 사실을 출력합니다.
    • /last:data 는 재분석 없이 이전 데이터 모델 스냅샷을 출력합니다.
    • /last:prompt 는 재분석 없이 이전 프롬프트 덤프를 출력합니다.
    • /history 는 메모리 내 결과 링 버퍼를 나열합니다. 인덱스 1 이 가장 최신 결과입니다.
    • /refresh <target> 은 해당 대상의 영구 아티팩트 재생을 우회하고, 새로운 로컬 분석과 LLM 분석을 실행하며, 성공적인 LLM 기반 결과 이후 저장된 아티팩트를 대체합니다.
    • /last:N:explain, /last:N:json, /last:N:facts, /last:N:data, /last:N:prompt 는 로컬 분석이나 LLM 호출 없이 기록 인덱스별로 이전 캐시된 결과를 재생합니다.
    • /last:* 모드는 터미널 재생 명령입니다. 동일한 명령에 대상이 있는 경우 캐시된 아티팩트가 재생되며 해당 대상에 대한 로컬 분석이나 LLM 요청이 시작되지 않습니다.
    • 메모리 내 캐시된 아티팩트는 로드된 확장 인스턴스에만 존재합니다. 결과 기록은 가장 최근 8개의 결과를 유지하며 WinDbg가 확장을 언로드하거나 프로세스가 종료되면 사라집니다.
    • 성공적인 LLM 기반 결과는 로드된 decomp.dll 옆에 있는 artifact 폴더에 자동으로 저장됩니다. 운영자는 별도의 저장 명령이 필요하지 않습니다.
    • 영구 아티팩트에는 request, response, data_model, debug_prompt 와 Win32/KD 버전 값, 빌드 문자열, 선택적 NtBuildLab, 빌드 지문을 포함한 kernel_build 객체가 포함됩니다.
    • 이후 세션에서 동일한 !decomp <target> 명령을 실행하면 대상 해결 및 함수 RVA 복구 후 자동으로 artifact\<kernel_build>\... 경로를 확인합니다. 저장된 kernel_build가 현재 OS 빌드와 일치하면 확장은 함수 바이트를 읽거나 로컬 분석기 패스를 실행하거나 LLM을 호출하지 않고 아티팩트를 재생합니다.
    • 누락되었거나 읽을 수 없거나 일치하지 않는 영구 아티팩트는 캐시 미스로 처리됩니다. 명령은 새 분석으로 대체되며 성공적인 LLM 기반 결과 후에만 아티팩트를 덮어씁니다.
    • 일반 출력의 DML 작업 링크는 이러한 캐시된 /last:* 뷰를 사용하므로 explain, json, facts, prompt 또는 data-model 을 클릭해도 새 디컴파일 실행이 시작되지 않습니다.
    • 레거시 /last-json, /last-explain, /last-facts, /last-data-model, /last-dx, /last-prompt 는 계속 지원됩니다.

    DML 탐색:

    • WinDbg가 현재 출력 콜백이 DML 인식임을 보고하면 의사 코드는 구성된 DML 색상 슬롯으로 구문 강조 표시됩니다.
    • 일반 출력에는 동일한 대상에 대해 클릭 가능한 explain, json, facts, prompt, data-model, history 링크가 포함된 actions 행이 포함됩니다.
    • 일반 출력에는 항목 디스어셈블리, 항목 중단점 및 마지막 아티팩트 재생 링크가 포함된 nav 행도 포함됩니다.
    • 항목 주소, 기본 블록, 증거 블록, 제어 흐름 영역, 유형 힌트 사이트, 관찰된 메모리 핫스팟 사이트, TTD 쿼리 제안 및 직접 호출 대상은 확장에 충분한 주소 정보가 있는 경우 클릭 가능한 링크가 됩니다.
    • 불확실성 및 검증기 경고는 원인이 분기, 루프, 스위치, 무반환 호출, 반환 명령 또는 함수 항목에 매핑될 수 있는 경우 가장 잘 복구된 증거 위치에 연결됩니다.
    • 현재 출력 경로가 DML 인식이 아닌 경우 확장은 자동으로 일반 텍스트로 대체됩니다. 분석 결과는 동일하며 프레젠테이션만 변경됩니다.

    세션 인식 및 관찰된 동작 세부 정보:

    • /view:json, /view:facts, /view:prompt 및 일반 LLM 모드는 session_policy 를 포함합니다.
    • session_policy 는 디버그 클래스, 한정자, 실행 종류, 분석 전략, 덤프/라이브/커널 플래그 및 TTD 지원이 로드되었는지 여부를 기록합니다.
    • observed_behavior 는 현재 rip, rsp, 읽을 수 있는 반환 주소, Microsoft x64 레지스터 인수 샘플(rcx, rdx, r8, r9), 반복 메모리 액세스 핫스팟 및 제안된 TTD 명령을 기록합니다.
    • 현재 프레임 인수 샘플은 현재 명령 포인터가 분석 중인 함수 내부에 있을 때만 높은 신뢰도를 가집니다. 그렇지 않으면 컨텍스트 힌트로 유지됩니다.
    • 디버거 프로세스에 ttdext.dll 또는 TTDReplay.dll 이 로드된 경우 확장은 이미 추적 데이터가 수집되었다고 조용히 가정하는 대신 제안된 dx @$cursession.TTD.Calls(...) 쿼리를 추가합니다.

    사용자 수정 스위치를 사용하면 디버거에 의미론적 정보가 충분하지 않을 때 명령줄에서 분석기 사실을 패치할 수 있습니다:```text !decomp /fix:noreturn:FatalError module!FunctionName !decomp /fix:type:rcx=MY_TYPE* module!FunctionName !decomp /fix:field:[rcx+18h]=uint32_t module!FunctionName !decomp /fix:rename:v3=request module!FunctionName !decomp /fix:clear

    root@kitploit:~
    - `/fix:noreturn:name`는 일치하는 호출을 리턴 불가로 처리하여 폴백 디스어셈블리, CFG 복구, ABI 정보 및 검증기 검사에 사용합니다.
    - `/fix:type:expr=TYPE`는 신뢰도가 높은 사용자 타입 힌트를 추가합니다.
    - `/fix:field:expr=TYPE`는 신뢰도가 높은 사용자 필드 힌트를 추가합니다.
    - `/fix:rename:old=new`는 이름 변경 힌트를 추가하고 최종 의사 코드 식별자에 이름 변경을 적용합니다.
    - `/fix:clear`는 세션에 유지되는 모든 수정 재정의를 지웁니다.
    
    환경 변수 `DECOMP_NORETURN_OVERRIDES`는 계속 지원됩니다. 명령줄 `/fix:noreturn:` 값은 현재 WinDbg 세션의 원래 환경 값 위에 추가됩니다.
    
    수정 스위치는 세션에 유지됩니다:
    
    - `/fix:noreturn:`, `/fix:type:`, `/fix:field:`, `/fix:rename:`는 로드된 확장에 의해 기억되고 나중에 `!decomp` 실행 시 재사용됩니다.
    - `/fix:clear`는 세션에 유지되는 모든 수정을 지우고 리턴 불가 환경 재정의를 확장 로드 시점의 원래 값으로 복원합니다.
    - 레거시 `/noreturn:`, `/type:`, `/field:`, `/rename:`, `/clear-overrides`는 계속 지원됩니다.
    
    형식이 잘못된 수정 값은 무시되고 캐시되지 않고 `uncertainties`에 보고됩니다. 예를 들어, `/fix:type:rcx`는 `expr=TYPE` 쌍을 포함하지 않으므로 무시됩니다.
    
    권장 조사 워크플로:
    
    1. `!decomp /view:facts target`로 시작하여 함수 범위, 블록, 호출, 임포트, PDB 데이터 및 세션 정보가 적절한지 확인합니다.
    2. LLM 요청을 보내기 전에 `!decomp /view:plan target`을 사용하여 청킹, 프롬프트 크기, 시간 초과 위험 및 심볼 품질을 추정합니다.
    3. 프롬프트 크기, 언어 또는 증거 선택이 잘못된 것 같으면 `!decomp /view:prompt target`을 사용합니다.
    4. 완전히 검증된 의사 C 결과를 위해 `!decomp target`을 실행합니다.
    5. 기존의 영구 아티팩트가 재생되고 있지만 새 분석이 필요할 때 `!decomp /refresh target`을 사용합니다.
    6. 결과가 잘못된 것 같으면 `!decomp /view:explain target`을 실행하고 검증기 경고, 증거 범위 및 제안된 수정을 검사합니다.
    7. `/fix:noreturn:`, `/fix:type:`, `/fix:field:`, `/fix:rename:` 등과 같은 집중된 수정을 추가하고 동일한 대상에 대해 다시 실행합니다.
    8. 여러 최근 결과를 비교할 때 `/history` 및 인덱싱된 `/last:N:*` 재생을 사용합니다.
    9. 버그를 제출하거나 빌드 간 동작을 비교할 때 `/view:json` 또는 `/last:json`을 사용합니다.
    
    ## 분석기 사실 표면
    
    최근 분석기 사실은 의도적으로 `/view:json`, `/view:facts`, `/view:prompt` 및 일반 LLM 모드를 통해 전달됩니다. 먼저 검사할 가치가 있는 필드:
    
    - `stack_pointer`는 명령어별 스택 델타, 프레임 상대 별칭 및 신뢰도를 기록합니다.
    - `call_arguments`는 호출 사이트에서 복구된 레지스터 및 스택 인수를 기록하며, 증거가 충분히 강력한 경우 주변 크로스 블록 스택 저장소도 포함합니다.
    - `pdb.prototype_parameters`는 구조화된 프로토타입 매개변수 이름, 타입, 순서, ABI 위치 및 소스 신뢰도를 기록합니다.
    - `control_flow`는 루프 유도 변수, 초기값, 단계, 경계, 방향, 스위치 테이블 주소, 케이스 대상, 기본 대상, 범위 경계, 부호 및 복구된 인덱스 표현식을 포함합니다.
    - `callee_summaries` 및 호출 대상 정보는 직접, 간접 및 가상 호출/가상 테이블 후보와 알려진 Win32/NT/Rtl 메모리, 할당, 해제 및 상태 의미를 포함합니다.
    - `obfuscation`은 OLLVM 스타일 평탄화 디스패처 후보, 상태 변수, 복구된 의미론적 에지, 불투명 조건자 및 스칼라 대체 관용구를 노출합니다.
    - `semantic_control_flow`는 난독화 정보에서 파생된 복구된 활성/비활성 에지를 노출하며, `/deobf:off`를 사용하는 경우에도 검사할 수 있습니다.
    - `deobfuscation_readiness`는 `enabled`, 안전한 다시 쓰기 작업, 차단된 가정, 우선 순위 사실 경로, 개수 및 신뢰도를 노출합니다. 비활성화되면 정책 결정을 기록하고 난독화 해제된 제어 흐름 다시 쓰기를 차단합니다.
    - 프롬프트 사실 선택은 먼저 높은 신호 항목을 선택한 다음 분포를 유지하기 위해 분산 샘플링을 사용하므로 큰 함수가 낮은 빈도의 증거를 모두 잃지 않습니다.
    
    ## 권장 dbgeng 설정
    
    가장 빠른 방법은 헤더와 임포트 라이브러리를 프로젝트에 공급업체화하는 것입니다.
    예상 공급업체 레이아웃:```text
    third_party\dbgeng\inc\dbgeng.h
    third_party\dbgeng\lib\dbgeng.lib
    

    수동으로 복사하거나 도우미 스크립트를 사용할 수 있습니다.

    디버거 루트에서 벤더 복사본 준비```powershell

    powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-DbgengVendor.ps1 ` -SourceRoot 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x64'

    root@kitploit:~
    ### 명시적 파일 경로에서 벤더 복사본 준비```powershell
    powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-DbgengVendor.ps1 `
        -HeaderPath 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\sdk\inc\dbgeng.h' `
        -LibraryPath 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\dbgeng.lib'
    

    third_party\dbgeng 디렉터리가 존재하면 Build.ps1이 자동으로 이를 우선 사용하며, 일반적으로 DEBUGGERS_ROOT는 필요하지 않습니다.

    권장 Zydis 설정

    저장소는 다음 중 하나를 사용할 수 있습니다:

    • 벤더 제공 third_party\zydis 소스
    • CMake FetchContent

    기본 동작은 auto이며, third_party\zydis가 존재할 경우 이를 우선 사용하고, 없을 경우 CMake 구성 중에 Zydis를 가져옵니다.

    예상 벤더 레이아웃:```text third_party\zydis\CMakeLists.txt third_party\zydis\include\Zydis\Zydis.h third_party\zydis\dependencies\zycore\CMakeLists.txt

    root@kitploit:~
    공급업체 복사본을 새로 고치거나 생성하세요:```powershell
    powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-ZydisVendor.ps1
    

    이미 다운로드된 로컬 소스 트리에서도 vendor를 할 수 있습니다:```powershell powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-ZydisVendor.ps1 ` -SourcePath 'C:\path\to\zydis'

    root@kitploit:~
    ## Build
    
    권장 경로는 Visual Studio 개발자 PowerShell 또는 개발자 명령 프롬프트입니다.
    
    빌드된 `decomp.dll`은 이제 `version.txt`에서 가져온 Windows 파일 버전을 포함합니다.
    
    ### Normal build```powershell
    powershell -ExecutionPolicy Bypass -File .\scripts\Build.ps1 -Reconfigure
    

    회귀 테스트```powershell

    cmake --build build --config Debug ctest --test-dir build -C Debug --output-on-failure cmake --build build --config Release ctest --test-dir build -C Release --output-on-failure

    root@kitploit:~
    `decomp_snapshot_tests`는 복구된 스택 인수, SIMD/FP ABI 입력, 벡터 제로 관용구 억제, 루프 귀납 선호도, 스위치 메타데이터, 가상 호출 메타데이터, OLLVM 스타일 난독화 사실, `/deobf:off` 정책, 알려진 API 요약, 프롬프트 사실 선택, 및 검증기 기반 검사에 대한 분석기/프로토콜/검증기 계약을 다룹니다.
    
    ### 레거시 dbgeng 빌드```powershell
    powershell -ExecutionPolicy Bypass -File .\scripts\Build-Legacy.ps1 -Reconfigure
    

    자동 증가 DLL 파일 버전을 포함한 릴리스 빌드```powershell

    powershell -ExecutionPolicy Bypass -File .\scripts\Invoke-ReleaseBuild.ps1

    root@kitploit:~
    이 스크립트는 `version.txt`의 마지막 구성 요소를 `1`만큼 증가시키고, 재구성을 강제한 후 Release DLL을 빌드합니다. 예를 들어, `1.0.0.7`이 `1.0.0.8`이 됩니다.
    
    ### 일반 옵션
    
    - `-Configuration Release|Debug`
    - `-Clean`
    - `-Reconfigure`
    - `-ConfigureOnly`
    - `-Verbose`
    - `-ZydisSource Auto|Vendor|Fetch`
    - `-ZydisVendorDir 'C:\path\to\zydis'`
    - `-DebuggersRoot 'C:\Program Files (x86)\Windows Kits\10\Debuggers\x64'`
    - `-DbgengIncludeDir 'E:\works\windbg_llm_decomp_2\windbg_llm_decomp\third_party\dbgeng\inc'`
    - `-DbgengLibrary 'E:\works\windbg_llm_decomp_2\windbg_llm_decomp\third_party\dbgeng\lib\dbgeng.lib'`
    
    ### 공급업체 우선 예제```powershell
    powershell -ExecutionPolicy Bypass -File .\scripts\Build.ps1 `
        -Configuration Release `
        -ZydisSource Vendor `
        -Reconfigure `
        -Verbose
    

    명시적 포함 및 라이브러리 예제```powershell

    powershell -ExecutionPolicy Bypass -File .\scripts\Build.ps1 -Configuration Release -DbgengIncludeDir 'E:\works\windbg_llm_decomp_2\windbg_llm_decomp\third_party\dbgeng\inc' -DbgengLibrary 'E:\works\windbg_llm_decomp_2\windbg_llm_decomp\third_party\dbgeng\lib\dbgeng.lib' -Reconfigure

    root@kitploit:~
    빌드 스크립트는 자동으로 다음을 찾으려고 시도합니다:
    
    - `cmake.exe`를 PATH, 독립형 CMake 또는 Visual Studio 번들 CMake에서 찾습니다
    - 프로젝트 루트 아래의 `third_party\dbgeng`
    - 환경 변수 또는 일반적인 Windows Kits 위치에서 `DEBUGGERS_ROOT`
    
    Zydis 소스 선택은 다음과 같이 작동합니다:
    
    - `Auto`: `third_party\zydis`를 선호하며, 그렇지 않으면 구성 중 `Zydis`를 가져옵니다
    - `Vendor`: 사용 가능한 `third_party\zydis` 트리 또는 `-ZydisVendorDir`로 전달된 경로가 필요합니다
    - `Fetch`: 벤더 트리를 무시하고 항상 CMake가 `Zydis`를 다운로드하도록 합니다
    
    `DEBUGGERS_ROOT`는 다음 레이아웃 중 하나를 사용하는 디버거 루트를 가리킬 수 있습니다:
    
    - `sdk\inc\dbgeng.h` and `sdk\lib\dbgeng.lib`
    - `sdk\inc\dbgeng.h` and `sdk\lib\amd64\dbgeng.lib`
    - `sdk\inc\dbgeng.h` and `sdk\lib\x64\dbgeng.lib`
    - `sdk\inc\dbgeng.h` and `dbgeng.lib`
    - `inc\dbgeng.h` and `lib\dbgeng.lib`
    - `inc\dbgeng.h` and `lib\amd64\dbgeng.lib`
    - `inc\dbgeng.h` and `lib\x64\dbgeng.lib`
    - `dbgeng.h` and `dbgeng.lib`
    
    설치가 해당 레이아웃과 일치하지 않으면 CMake 경로를 직접 전달하십시오:```powershell
    cmake -S . -B build-manual -G "Visual Studio 17 2022" -A x64 `
        -DDBGENG_INCLUDE_DIR='E:\works\windbg_llm_decomp_2\windbg_llm_decomp\third_party\dbgeng\inc' `
        -DDBGENG_LIBRARY='E:\works\windbg_llm_decomp_2\windbg_llm_decomp\third_party\dbgeng\lib\dbgeng.lib'
    cmake --build build-manual --config Release
    

    레거시 dbgeng 호환성

    dbgeng.h가 너무 오래되어 빌드가 GetSymbolEntryOffsetRegions 또는 GetSymbolEntryString에서 실패하는 경우, Build-Legacy.ps1을 사용하거나 CMake 옵션을 수동으로 전달하세요.

    DECOMP_USE_SYMBOL_ENTRY_APIS=OFF를 설정하면 확장 기능은 다음으로 대체됩니다:

    • x64 언와인드 기반 범위 복구를 위한 GetFunctionEntryByOffset
    • 언와인드 메타데이터가 없는 경우 GetNameByOffset과 휴리스틱 디스어셈블리 조합

    PDB 사용

    확장 기능은 WinDbg가 대상 모듈에 대해 이미 로드한 심볼 및 타입 정보를 자동으로 소비합니다.

    PDB 보강에는 두 가지 실용적인 수준이 있습니다:

    • 모듈 수준의 타입화된 사실: 함수 이름, 프로토타입, 반환 타입, 전역 심볼 이름, 필드 오프셋, 열거형 상수 이름 및 소스 라인 힌트
    • 범위 수준의 사실: 대상 함수가 현재 범위와 일치하거나 확장 기능이 함수 진입점으로 범위를 전환할 수 있을 때 활성 디버거 범위의 매개변수 및 로컬 이름/타입

    이것이 의사 코드 생성에 미치는 영향:

    • 복구된 레지스터 인자는 휴리스틱 이름(예: arg1)에서 PDB 이름(예: ctx)으로 변경될 수 있음
    • 스택 로컬 변수는 사용 가능할 때 일반 슬롯 이름에서 범위 로컬 이름 및 타입으로 업그레이드될 수 있음
    • 포인터 기반 메모리 접근은 ctx->State와 같은 필드 힌트를 얻을 수 있음
    • 열거형 비교는 state == StateRunning과 같은 심볼릭 이름을 얻을 수 있음
    • 직접 호출된 함수 요약은 PDB에서 파생된 프로토타입과 반환 타입을 재사용할 수 있음

    중요한 제한 사항:

    • 공개 PDB는 함수 이름과 일부 타입 데이터를 제공할 수 있지만, 범위 로컬 변수는 포함하지 않는 경우가 많음
    • 최적화된 빌드는 범위 로컬 변수 값과 위치를 불완전하거나 모호하게 만들 수 있음
    • 확장 기능은 PDB 데이터를 의미론적 힌트로 취급하며, 디스어셈블리와 모순되는 제어 흐름을 재정의하는 권한으로 간주하지 않음

    현재 동작은 자동입니다. PDB 사용을 위한 별도의 구성 스위치는 없습니다. 품질은 WinDbg가 이미 로드한 내용과 현재 범위를 대상 함수와 일치시킬 수 있는지 여부에 따라 달라집니다.

    구성

    decomp.llm.json을 decomp.dll 옆에 배치하세요.

    이 파일은 네트워크 LLM 설정만을 위한 것이 아닙니다.

    • provider, endpoint, model, 토큰 예산, 청킹 설정은 LLM 경로에 영향을 미칩니다.
    • display_language는 요약 및 불확실성에 사용되는 자연어에 영향을 미칩니다.
    • syntax_highlighting은 DML 인식 출력이 가능할 때 WinDbg에서 의사 코드 렌더링에 영향을 미칩니다.
    • display_language와 syntax_highlighting은 /view:analyzer 및 목업 제공자 출력에서도 사용됩니다.

    예시:```json { "provider": "openai-compatible", "endpoint": "https://api.openai.com/v1/chat/completions", "model": "gpt-5.4-2026-03-05", "api_key_env": "OPENAI_API_KEY", "timeout_ms": 120000, "max_completion_tokens": 12000, "force_chunked": false, "chunk_trigger_instructions": 900, "chunk_trigger_blocks": 36, "chunk_block_limit": 24, "chunk_count_limit": 16, "chunk_completion_tokens": 6000, "merge_completion_tokens": 12000, "display_language": { "mode": "auto", "tag": "en-US", "name": "English" }, "syntax_highlighting": { "keyword_color": "warnfg", "type_color": "emphfg", "function_name_color": "srcid", "identifier_color": "wfg", "number_color": "changed", "string_color": "srcstr", "char_color": "srcchar", "comment_color": "subfg", "preprocessor_color": "verbfg", "operator_color": "srcannot", "punctuation_color": "srcpair" } }

    root@kitploit:~
    ChatGPT 구독 예시:```json
    {
      "provider": "chatgpt",
      "model": "gpt-5.5",
      "chatgpt_auth_file": "%USERPROFILE%\\.codex\\auth.json",
      "timeout_ms": 120000,
      "max_completion_tokens": 12000,
      "force_chunked": false,
      "chunk_trigger_instructions": 900,
      "chunk_trigger_blocks": 36,
      "chunk_block_limit": 24,
      "chunk_count_limit": 16,
      "chunk_completion_tokens": 6000,
      "merge_completion_tokens": 12000,
      "reasoning_effort": "medium"
    }
    

    For provider: "chatgpt", endpoint는 선택 사항이며 기본값은 https://chatgpt.com/backend-api/codex/responses입니다. https://chatgpt.com/backend-api/codex와 같은 기본 URL도 허용되며 /responses로 정규화됩니다. 확장 프로그램은 구성된 인증 파일에서 tokens.access_token과 tokens.refresh_token을 읽고, OpenAI OAuth를 통해 만료된 JWT 액세스 토큰을 갱신한 후 갱신된 토큰 세트를 해당 파일에 다시 씁니다. 기본 인증 파일은 %USERPROFILE%\.codex\auth.json이므로 Codex CLI ChatGPT 로그인을 직접 재사용할 수 있습니다. 확장 프로그램은 WinDbg 내부에서 브라우저를 실행하거나 OAuth 로그인 흐름을 시작하지 않습니다. 인증 파일이 없거나, 유효하지 않거나, 더 이상 갱신할 수 없는 경우 WinDbg 외부에서 codex login을 실행하고 !decomp를 다시 시도하세요. 일회성 테스트의 경우 인증 파일 대신 access_token 또는 access_token_env를 사용하세요. api_key, api_key_env, DECOMP_LLM_API_KEY, OPENAI_API_KEY는 OpenAI 호환 API 키 제공자를 위해 예약되어 있으며 ChatGPT 제공자에서는 무시됩니다.

    지원되는 키:

    • provider
    • endpoint
    • model
    • api_key
    • api_key_env
    • access_token
    • access_token_env
    • chatgpt_auth_file
    • reasoning_effort
    • timeout_ms
    • max_completion_tokens
    • force_chunked
    • chunk_trigger_instructions
    • chunk_trigger_blocks
    • chunk_block_limit
    • chunk_count_limit
    • chunk_completion_tokens
    • merge_completion_tokens
    • display_language
    • syntax_highlighting

    지원되는 display_language 키:

    • mode
    • tag
    • name

    display_language.mode 허용 값:

    • auto
    • fixed

    지원되는 syntax_highlighting 키:

    • keyword_color
    • type_color
    • function_name_color
    • identifier_color
    • number_color
    • string_color
    • char_color
    • comment_color
    • preprocessor_color
    • operator_color
    • punctuation_color

    syntax_highlighting 색상 값 작동 방식:

    • 이 값들은 WinDbg DML 색상 슬롯 이름이며, 고정 RGB 또는 CSS 색상 이름이 아닙니다.
    • 확장 프로그램은 이를 WinDbg DML에 <col fg="..."> 형태로 전달합니다.
    • WinDbg는 각 슬롯 이름을 현재 테마 및 명령 창 색상 설정에 따라 해석합니다.
    • 따라서 verbfg, warnfg, emphfg, srcid 등 유사한 이름은 모든 시스템에서 동일한 색상으로 매핑되지 않습니다.
    • 현재 #FF8800과 같은 임의의 RGB 값에 대한 확장 프로그램 측 구성은 없습니다. 실제 색상은 decomp.llm.json이 아닌 WinDbg에서 결정됩니다.

    실제 영향:

    • 하나의 어두운 테마에서 기호 색상이 너무 어둡게 보인다면, 동일한 슬롯이 다른 시스템이나 다른 WinDbg 테마에서는 괜찮게 보일 수 있습니다.
    • 두 슬롯이 현재 테마에서 거의 동일하게 보인다면, 확장 프로그램이 설정을 무시한다고 가정하지 말고 syntax_highlighting에서 슬롯 이름을 변경하세요.
    • 최종 색상이 완전히 다르게 표시되어야 한다면, 슬롯 자체가 다르게 해석되도록 WinDbg의 테마 또는 명령 창 색상 설정을 변경하세요.

    강조 표시가 보이는 경우:

    • 확장 프로그램은 WinDbg가 현재 출력 콜백이 DML을 인식한다고 보고할 때 DML 색상이 적용된 의사 코드를 출력합니다.
    • 현재 디버거 출력 경로가 DML을 인식하지 못하는 경우 확장 프로그램은 자동으로 일반 텍스트 의사 코드로 대체됩니다.
    • /view:json 출력은 DML로 렌더링되지 않습니다. 대신 pseudo_c_tokens를 포함하여 외부 도구가 자체 구문 강조를 적용할 수 있습니다.

    일반적인 DML 전경 슬롯:

    • wfg 기본 창 전경 텍스트.
    • normfg 일반 명령 창 텍스트.
    • emphfg 강조 텍스트. Microsoft는 기본적으로 연한 파란색으로 문서화하지만, 정확한 모양은 여전히 테마에 따라 다릅니다.
    • warnfg 경고 텍스트.
    • errfg 오류 텍스트.
    • verbfg 자세한 정보 텍스트.
    • changed 변경된 데이터. Microsoft는 기본적으로 빨간색으로 문서화합니다.

    일반적인 소스 지향 DML 전경 슬롯:

    • srcnum 숫자 상수.
    • srcchar 문자 상수.
    • srcstr 문자열 상수.
    • srcid 식별자.
    • srckw 키워드.
    • srcpair 중괄호 또는 짝을 이루는 기호.
    • srccmnt 주석.
    • srcdrct 지시문.
    • srcspid 특수 식별자.
    • srcannot 소스 주석 또는 주석 유사 요소.

    예제:

    • verbfg는 "자세한 정보 전경 슬롯"을 의미하며, "특정 이름의 파란색"이 아닙니다.
    • warnfg는 "경고 전경 슬롯"을 의미하며, "항상 노란색 또는 주황색"이 아닙니다.
    • function_name_color: "srcid"는 "WinDbg의 식별자 슬롯을 사용하여 함수 이름 렌더링"을 의미합니다.

    어두운 테마에서 색상을 조정하는 경우:

    • 함수 이름이 srcid로 너무 어둡게 보이면 function_name_color: "emphfg" 또는 function_name_color: "verbfg"부터 시작하세요.
    • 읽을 수 있어야 하지만 키워드를 압도하지 않아야 하는 일반 기호의 경우 identifier_color: "normfg" 또는 identifier_color: "wfg"를 사용하세요.
    • 주석이 완전히 사라지지 않고 뒤로 물러나길 원한다면 comment_color: "subfg"를 유지하세요.

    공식 참조:

    • DML 색상 슬롯 동작 및 예제: DML을 사용하여 디버거 출력 사용자 지정
    • 일반, 경고, 오류, 자세한 정보와 같은 명령 창 메시지 클래스: .printf (WinDbg)

    체크인된 decomp.llm.json.example에는 확장 프로그램이 실제로 읽는 유효한 최상위 설정만 포함되어 있습니다.

    참고 전용 예제:

    PC UI 언어 따르기:```json { "display_language": { "mode": "auto" } }

    root@kitploit:~
    강제 영어:```json
    {
      "display_language": {
        "mode": "fixed",
        "tag": "en-US",
        "name": "English"
      }
    }
    

    한국어 강제:```json { "display_language": { "mode": "fixed", "tag": "ko-KR", "name": "Korean" } }

    root@kitploit:~
    다크 구문 강조 프리셋:```json
    {
      "syntax_highlighting": {
        "keyword_color": "warnfg",
        "type_color": "emphfg",
        "function_name_color": "srcid",
        "identifier_color": "wfg",
        "number_color": "changed",
        "string_color": "verbfg",
        "char_color": "srcchar",
        "comment_color": "subfg",
        "preprocessor_color": "normfg",
        "operator_color": "srcannot",
        "punctuation_color": "srcpair"
      }
    }
    

    가벼운 구문 강조 프리셋:```json { "syntax_highlighting": { "keyword_color": "emphfg", "type_color": "warnfg", "function_name_color": "srcid", "identifier_color": "normfg", "number_color": "changed", "string_color": "verbfg", "char_color": "srcchar", "comment_color": "subfg", "preprocessor_color": "srcannot", "operator_color": "wfg", "punctuation_color": "subfg" } }

    root@kitploit:~
    `/view:json` 응답 세부 정보 예시:
    
    - JSON 응답에는 `pseudo_c` 및 `pseudo_c_tokens`가 포함됩니다.
    - `pseudo_c_tokens`는 결정론적 토큰 스트림으로, 외부 구문 강조에 적합합니다.
    - 직렬화된 요청에는 `preferred_natural_language_tag` 및 `preferred_natural_language_name`이 포함되며, 이는 `display_language.mode`를 적용한 후 해결된 표시 언어를 반영합니다.
    - 분석기 사실에는 이제 P0 품질 필드가 포함됩니다:
      `ir_values`, `block_value_states`, `control_flow`, `abi`.
    - `ir_values`는 SSA와 유사한 값 ID, 정의 사이트, 대상, 정식 표현, 사용 링크, 상수/복사 플래그 및 죽은 정의 힌트를 노출합니다.
    - `block_value_states`는 기본 블록별 라이브-인/라이브-아웃 도달 정의, 정식 값, 저장소 클래스, 수렴 상태 및 신뢰도를 노출합니다.
    - `stack_pointer`는 명령별 스택 델타, 프레임 상대 별칭, 원시 기준/오프셋 및 신뢰도를 노출합니다.
    - `control_flow`는 `natural_loop`, `if_else_candidate`, `switch_candidate`와 같은 구조적 영역 후보를 블록 증거, 루프 유도 메타데이터, 스위치 테이블/기본값/범위 메타데이터, 부호, 인덱스 표현식 및 신뢰도와 함께 노출합니다.
    - `abi`는 Microsoft x64 섀도 스페이스 가정, 홈-슬롯 증거, 프레임/프롤로그/에필로그 인식, 노-리턴 호출 증거, 테일 콜 후보, 썽크 후보, 임포트 래퍼 후보, 레지스터 및 스택 저장소에서 복구된 호출 인수를 노출합니다.
    - 분석기 사실에는 이제 P1 의미 필드도 포함됩니다:
      `type_hints`, `idioms`, `callee_summaries`.
    - `type_hints`는 포인터, 로컬, 필드 오프셋, 배열형, 열거형, 비트 플래그형, vtable 후보 증거를 소스 및 신뢰도와 함께 노출합니다. PDB 데이터를 사용할 수 있는 경우, 범위가 지정된 매개변수/로컬 변수, 필드 힌트 및 열거 상수도 이 통합 타입 힌트 스트림으로 승격됩니다.
    - `idioms`는 인식된 도우미 호출 및 컴파일러 패턴(메모리 복사/채우기, 문자열 복사, 보안 쿠키 검사, 스택 프로브, 할당/해제 도우미, 집계 초기화 프로그램, RIP-상대 전역/임포트 로드 등)에 대한 상위 수준 대체를 노출합니다.
    - `callee_summaries`는 직접 및 간접 호출 대상의 반환 유형, 매개변수 모델, 부작용, 메모리 효과, 소유권, 소스 및 신뢰도 힌트를 노출합니다. WinDbg가 해결할 수 있는 경우 기호/유형이 보강된 호출 대상이 초기 휴리스틱 요약을 대체하며, 가상 호출 후보는 복구된 경우 대상 표현식 및 vtable 오프셋을 포함합니다.
    - 알려진 Win32/NT/Rtl API 요약은 기호 이름을 사용할 수 있을 때 메모리 복사/채우기/제로, 할당, 해제, 상태 및 오류 동작을 설명합니다.
    - 프롬프트 사실에는 `analyzer_skeleton` 및 `graph_summary`가 포함되어 모델이 빈 페이지에서 시작하는 대신 증거 기반 초안을 정제할 수 있도록 합니다.
    - `graph_summary`는 진입 블록, 제어 흐름 영역, 정규화된 조건, 대표적인 고신호 블록을 명시적 잘림 정책과 함께 제공합니다. 프롬프트 사실 선택은 이제 고신호 항목을 순위화하고 스프레드 샘플링을 사용하여 큰 사실 세트를 대표성 있게 유지합니다.
    - `evidence_graph`는 고신호 사실 노드와 출처 가장자리를 노출하여 IR 값, 블록 값 상태, 메모리 액세스, 호출 대상, 타입 힌트, PDB 힌트 및 관찰된 동작을 명령어 및 블록 증거로 추적할 수 있도록 합니다.
    - `obfuscation`, `semantic_control_flow`, `deobfuscation_readiness`는 OLLVM 스타일 복구 사실과 현재 명령에 대해 역난독화 재작성 안내가 활성화되었는지 여부를 노출합니다.
    - 검증기 응답에는 레거시 `warnings` 외에도 구조화된 `issues` 항목이 포함됩니다. 각 이슈는 `severity`, `code`, `message` 및 선택적 `evidence`를 전달하므로 도구가 `branch.true_target_not_successor`와 같은 오류를 위험도가 낮은 경고와 별도로 필터링할 수 있습니다.
    - 검증기 검사는 이제 정규화된 분기 true/false 대상을 CFG 후속과 비교하고, 수도 코드 분기 밀도를 복구된 조건부 분기와 비교하며, 직접 호출 대상 요약을 수도 코드 호출 효과와 교차 확인하고, 증거 그래프 노드/가장자리 근거를 검증하며, 블록 값 상태 참조를 복구된 블록 및 IR 값으로 다시 확인합니다.
    - 일반 및 설명 출력에는 간결한 `suggested fixes` 섹션이 포함될 수 있습니다. 이는 검증기 이슈, PDB 기반 이름 변경 기회 또는 반복 관찰된 메모리 핫스팟에서 파생된 보수적인 `/fix:*` 명령입니다. DML 인식 출력은 동일한 대상에 대해 즉시 적용 가능한 제안을 클릭 가능한 재실행 링크로 렌더링합니다. `TYPE`이 대체될 때까지 자리 표시자 필드 유형 제안은 일반 텍스트로 유지됩니다.
    - LLM 모드에서 확장 프로그램은 자동으로 검증기 이슈를 하나의 재시도 프롬프트로 공급합니다. 검증기 품질을 유지하거나 개선하는 경우 재시도가 유지되고, 그렇지 않으면 불확실성 메모가 추가된 원래 응답이 보존됩니다.
    - `session_policy` 및 `observed_behavior`는 라이브/덤프/커널/TTD 유사 정책, 현재 프레임 레지스터 인수 샘플, 메모리 핫스팟 및 제안된 추적 쿼리와 같은 WinDbg별 컨텍스트를 노출합니다.
    - 직렬화된 요청에는 이제 기호/유형 데이터를 사용할 수 있을 때 `pdb` 개체도 포함됩니다.
    - `pdb.availability`는 `none`, `symbols`, `typed` 또는 `scoped`와 같은 보강 수준을 보고합니다.
    - `pdb.params`, `pdb.locals`, `pdb.field_hints`, `pdb.enum_hints`, `pdb.source_locations`는 외부 도구 또는 오프라인 분석을 위한 기계 판독 가능 의미 힌트로 사용됩니다.
    
    선택적 환경 재정의:
    
    - `DECOMP_LLM_PROVIDER`
    - `DECOMP_LLM_ENDPOINT`
    - `DECOMP_LLM_MODEL`
    - `DECOMP_LLM_API_KEY`
    - `OPENAI_API_KEY`
    - `DECOMP_LLM_CHATGPT_ACCESS_TOKEN`
    - `DECOMP_LLM_CODEX_ACCESS_TOKEN`
    - `KERNFORGE_CODEX_ACCESS_TOKEN`
    - `DECOMP_LLM_CHATGPT_AUTH_FILE`
    - `DECOMP_LLM_CODEX_AUTH_FILE`
    - `KERNFORGE_CODEX_AUTH_FILE`
    - `DECOMP_LLM_REASONING_EFFORT`
    - `DECOMP_LLM_TIMEOUT_MS`
    - `DECOMP_LLM_MAX_COMPLETION_TOKENS`
    - `DECOMP_LLM_FORCE_CHUNKED`
    - `DECOMP_LLM_CHUNK_TRIGGER_INSTRUCTIONS`
    - `DECOMP_LLM_CHUNK_TRIGGER_BLOCKS`
    - `DECOMP_LLM_CHUNK_BLOCK_LIMIT`
    - `DECOMP_LLM_CHUNK_COUNT_LIMIT`
    - `DECOMP_LLM_CHUNK_COMPLETION_TOKENS`
    - `DECOMP_LLM_MERGE_COMPLETION_TOKENS`
    - `DECOMP_NORETURN_OVERRIDES`
      쉼표 또는 세미콜론으로 구분된 함수 이름 조각으로, 폴백 디스어셈블리, CFG 후속 복구, ABI 사실 및 검증기 검사 중에 노-리턴 대상으로 처리됩니다. 예: `DECOMP_NORETURN_OVERRIDES=MyAbort;PanicAndExit`.
    
    품질 우선 참고:
    
    - 이제 확장 프로그램은 큰 함수에 대한 청크 분할 다중 패스 분석을 지원합니다.
    - 분석기는 정제 전에 IR 값 사실, 블록 값 상태, 제어 흐름 영역, 증거 그래프 사실 및 x64 ABI/노-리턴 증거를 LLM에 보내므로 `/view:analyzer`, `/view:json` 및 일반 LLM 모드가 모두 동일한 P0 증거 기반을 공유합니다.
    - 검증기는 루프, 스위치, 노-리턴, 분기 대상, 반환 동작, 호출자 호출 효과, 증거 그래프 근거, 블록 값 상태 일관성, 증거 범위 및 의심스러운 식별자 주장을 분석기 증거와 교차 확인합니다. 확신에 찬 산문이 복구된 사실보다 앞설 때 신뢰도를 낮추고 각 이슈에 안정적인 심각도/코드 쌍을 레이블링합니다.
    - 검증기 피드백이 스키마 오류, 사실 충돌 또는 매우 낮은 조정 신뢰도를 발견하면 LLM 경로는 검증기 이슈를 프롬프트에 추가하여 자동으로 한 번 재시도합니다.
    - 클라우드 모델의 좋은 시작점은 `max_completion_tokens=12000`, `chunk_completion_tokens=6000`, `merge_completion_tokens=12000`이며, `force_chunked=false` 및 청크 트리거는 약 `900 instructions` 또는 `36 blocks`입니다.
    - 청크 파이프라인 스트레스 테스트에만 `force_chunked=true`를 유지하십시오. 평탄화되거나 디스패처가 많은 함수의 품질 중심 역컴파일은 일반적으로 함수가 구성된 청크 트리거를 초과할 만큼 커질 때까지 단일 프롬프트가 필요합니다.
    - 클라우드 모델의 경우 `timeout_ms`를 높게 유지하십시오. `120000`이 `15000`보다 안전한 시작점입니다.
    - 거대한 함수에서 품질이 여전히 낮으면 `/limit:N`을 줄이기 전에 `chunk_count_limit`를 높이십시오.
    - 엔드포인트가 구성되지 않으면 확장 프로그램은 결정론적 모의 공급자로 대체됩니다.
    - 확장 프로그램이 `/view:analyzer` 또는 모의 공급자를 사용 중이더라도 `display_language` 및 `syntax_highlighting`은 여전히 사용자에게 보이는 내용에 영향을 미칩니다.
    
    ## WinDbg Smoke Test
    
    1. `Build.ps1` 또는 `Build-Legacy.ps1`로 빌드합니다.
    2. 빌드된 `decomp.dll` 옆에 `decomp.llm.json`을 배치합니다.
    3. WinDbg를 시작합니다. 환경 변수는 선택적 재정의일 뿐입니다.
    4. 확장 프로그램을 로드합니다.
    5. LLM 경로를 활성화하기 전에 분석기 전용 모드의 유효성을 검증합니다.```text
    .load C:\path\to\decomp.dll
    !decomp /view:analyzer ntdll!RtlAllocateHeap
    !decomp /view:facts kernel32!Sleep
    

    그런 다음 LLM 모드를 검증하십시오:```text !decomp ntdll!RtlAllocateHeap !decomp /view:json ntdll!RtlAllocateHeap !decomp 0x7ffb`12345678

    root@kitploit:~
    예상 확인 사항:
    
    - `target`, `entry`, `module`이 일관되게 해석되어야 함
    - 일반 함수의 경우 `regions`가 0이 아니어야 함
    - `/view:analyzer`는 여전히 분석기 신뢰도 및 의사 코드 스텁을 출력해야 함
    - LLM 모드는 `summary`, `pseudo_c`, `pseudo_c_tokens`, `verified`를 채워야 함
    - `/view:json` 출력은 직렬화된 요청에 `preferred_natural_language_tag`와 `preferred_natural_language_name`을 포함해야 함
    - 비공개 또는 리치 PDB가 로드된 경우 `/view:json`은 `pdb.prototype`, `pdb.params`, 그리고 가능하면 `pdb.locals`도 포함해야 함
    - 타입화된 구조체와 열거형의 경우 `/view:json`은 `pdb.field_hints`와 `pdb.enum_hints`를 포함할 수 있음
    
    ## ChatGPT 구독 예제```powershell
    $env:DECOMP_LLM_PROVIDER = "chatgpt"
    $env:DECOMP_LLM_MODEL = "gpt-5.5"
    $env:DECOMP_LLM_CHATGPT_AUTH_FILE = "$env:USERPROFILE\.codex\auth.json"
    $env:DECOMP_LLM_TIMEOUT_MS = "120000"
    

    인증 파일에 갱신 토큰이 포함되어 있으면, 확장은 요청을 보내기 전에 만료된 액세스 토큰을 갱신합니다. DECOMP_LLM_CHATGPT_ACCESS_TOKEN은 임시 Bearer 토큰으로 사용될 수 있지만, 일반 WinDbg 세션에서는 인증 파일 경로가 더 좋습니다. 이 경로는 토큰 만료에도 유효하기 때문입니다. 확장은 !decomp 실행 중에 브라우저를 열지 않습니다. 대화형 ChatGPT 로그인이 필요한 경우 WinDbg 외부에서 codex login을 실행하세요.

    로컬 LLM 엔드포인트 예제

    Ollama```powershell

    $env:DECOMP_LLM_ENDPOINT = "http://127.0.0.1:11434/v1/chat/completions" $env:DECOMP_LLM_MODEL = "qwen2.5-coder:14b" $env:DECOMP_LLM_API_KEY = "ollama"

    root@kitploit:~
    ### LM Studio```powershell
    $env:DECOMP_LLM_ENDPOINT = "http://127.0.0.1:1234/v1/chat/completions"
    $env:DECOMP_LLM_MODEL = "local-model"
    $env:DECOMP_LLM_API_KEY = "lm-studio"
    

    vLLM 또는 OpenAI 호환 로컬 서버```powershell

    $env:DECOMP_LLM_ENDPOINT = "http://127.0.0.1:8000/v1/chat/completions" $env:DECOMP_LLM_MODEL = "Qwen/Qwen2.5-Coder-14B-Instruct" $env:DECOMP_LLM_API_KEY = "local"

    root@kitploit:~
    도구 다운로드