Skip to main content
Glama
sbergeron42

gdb-multiarch-mcp

by sbergeron42

gdb-multiarch-mcp

Claude와 같은 AI 어시스턴트가 Yuzu 또는 GDB 스텁이 있는 실제 콘솔에서 실행 중인 Nintendo Switch 실행 파일을 디버깅하기 위해 gdb-multiarch에 직접 액세스할 수 있도록 하는 MCP(Model Context Protocol) 서버입니다.

Ipiano/gdb-mcp를 기반으로 구축된 이 포크는 오프셋 기반 중단점, 명령어 패치(NOP/stub/replace), 프레임 포인터 역추적 및 주소 로컬라이제이션(모두 게임의 기본 주소인 $main 기준)을 위한 Switch 전용 디버깅 도구를 추가합니다.

기능

Claude(또는 모든 MCP 클라이언트)가 switch_start_session을 호출하면 서버는 다음을 수행합니다:

  1. WSL 내에서 gdb-multiarch 실행

  2. Switch 디버깅 명령어(.gdbinit.switch) 로드

  3. target extended-remote를 통해 GDB 스텁에 연결

  4. 애플리케이션이 시작될 때까지 기다린 후 연결(attach)

  5. 자동으로 $maincross2_Release.nss의 기본 주소로 설정

그 이후부터는 모든 표준 GDB 작업과 Switch 전용 도구를 MCP 도구 호출을 통해 사용할 수 있습니다.

사전 요구 사항

  • Windows with WSLgdb-multiarch는 WSL 내에서 실행됩니다(Debian에서 테스트됨)

  • gdb-multiarch가 WSL에 설치되어 있어야 함 (sudo apt install gdb-multiarch)

  • Python 3.10+ (WSL 내)

  • GDB 스텁 — Yuzu의 내장 GDB 스텁 또는 sys-gdbstub이 설치된 Switch

  • Claude Code (또는 MCP 호환 클라이언트)

설치

1. WSL에 gdb-multiarch 설치

wsl -d Debian
sudo apt install gdb-multiarch

2. MCP 서버 설치

Windows에서 다음을 실행하세요:

wsl.exe -d Debian -e bash -c 'export PATH=$HOME/.local/bin:$PATH && pip install --break-system-packages -e /mnt/c/path/to/gdb-multiarch-mcp'

또는 WSL 내부에서 실행:

pip install -e /mnt/c/path/to/gdb-multiarch-mcp

3. Claude Code에 추가

claude mcp add gdb-multiarch -s user -- wsl.exe -d Debian -e bash -c "export PATH=\$HOME/.local/bin:\$PATH && python3 -m gdb_multiarch_mcp"

또는 .claude.json에 수동으로 추가:

{
  "mcpServers": {
    "gdb-multiarch": {
      "type": "stdio",
      "command": "wsl.exe",
      "args": [
        "-d", "Debian", "-e", "bash", "-c",
        "export PATH=$HOME/.local/bin:$PATH && python3 -m gdb_multiarch_mcp"
      ]
    }
  }
}

4. 확인

claude mcp list

gdb-multiarch: ... - Connected 메시지가 표시되어야 합니다.

구성

연결을 사용자 지정하려면 WSL에서 다음 환경 변수를 설정하세요:

변수

기본값

설명

SWITCH_IP

192.168.1.235

Switch/Yuzu GDB 스텁의 IP 주소

SWITCH_PORT

22225

GDB 스텁 포트

GDB_PATH

gdb-multiarch

gdb-multiarch 바이너리 경로

GDB_MCP_LOG_LEVEL

INFO

로깅 레벨 (DEBUG, INFO, WARNING, ERROR)

설정하려면 MCP 구성에 env를 추가하세요:

{
  "mcpServers": {
    "gdb-multiarch": {
      "type": "stdio",
      "command": "wsl.exe",
      "args": ["..."],
      "env": {
        "SWITCH_IP": "192.168.1.100",
        "SWITCH_PORT": "22225"
      }
    }
  }
}

사용 가능한 도구

세션 관리

도구

설명

switch_start_session

Switch/Yuzu에 연결하고 게임에 attach한 후 $main을 설정합니다. 가장 먼저 호출하세요.

switch_stop_session

연결을 끊고 정리합니다

Switch 디버깅 도구

도구

설명

switch_break_at

$main+offset에 중단점 설정

switch_no_op

오프셋에서 NOP 명령어 실행 (0xD503201F 기록)

switch_stub

오프셋에서 함수 스텁 처리 (RET / 0xD65F03C0 기록)

switch_replace

오프셋의 명령어를 임의의 값으로 교체

switch_get_pc

$main 기준 오프셋으로 PC 가져오기

switch_localize

절대 주소를 $main 기준 오프셋으로 변환

switch_my_bt

절대 주소로 역추적 (프레임 포인터 워크)

switch_my_bt2

$main 기준 오프셋으로 역추적

switch_print_trace

결합: PC 오프셋 + LR 오프셋 + 전체 역추적

switch_xxd

메모리 16진수 덤프

switch_prepare_rehook

나중에 복원하기 위해 오프셋의 원본 명령어 4개 덤프

표준 GDB 도구

모든 표준 gdb-mcp 도구도 사용할 수 있습니다:

도구

설명

gdb_execute_command

모든 GDB 명령어 실행 (CLI 또는 MI)

gdb_set_breakpoint

함수/파일:라인/주소에 중단점 설정

gdb_list_breakpoints

모든 중단점 나열

gdb_delete_breakpoint

번호로 중단점 삭제

gdb_enable_breakpoint

중단점 활성화

gdb_disable_breakpoint

중단점 비활성화

gdb_continue

실행 계속

gdb_step

단계별 실행 (Step into)

gdb_next

단계별 실행 (Step over)

gdb_interrupt

실행 중인 프로그램 일시 중지

gdb_get_backtrace

표준 GDB 역추적

gdb_get_threads

스레드 나열

gdb_select_thread

스레드 전환

gdb_select_frame

스택 프레임 선택

gdb_get_frame_info

현재 프레임 정보

gdb_evaluate_expression

C/C++ 표현식 평가

gdb_get_variables

프레임의 로컬 변수

gdb_get_registers

CPU 레지스터 값

gdb_call_function

대상 프로세스에서 함수 호출

gdb_get_status

세션 상태

문제 해결

연결 시 "No route to host" 오류

WSL 네트워킹은 까다로울 수 있습니다. 다음을 시도해 보세요:

  1. WSL에서 SSH가 실행 중인지 확인: sudo service ssh start

  2. 연결 테스트: nc -vz <switch_ip> 22225

  3. 필요한 경우 경로 추가: sudo ip route add 192.168.1.0/24 via <gateway_ip>

  4. Windows PowerShell에서 포트 프록시:

netsh interface portproxy add v4tov4 listenport=22225 listenaddress=127.0.0.1 connectport=22225 connectaddress=<switch_ip>

GDB 스텁이 응답하지 않음

  • switch_start_session을 호출하기 전에 Yuzu/Switch에서 게임이 실행 중인지 확인하세요.

  • Yuzu의 GDB 스텁이 Emulation > Configure > Debug > Enable GDB Stub에서 활성화되어 있는지 확인하세요.

세션이 이미 실행 중인 경우

switch_stop_session을 먼저 호출한 다음 switch_start_session을 다시 호출하세요.

크레딧

  • Ipiano/gdb-mcp (Andrew Stelter) — 이 프로젝트가 기반으로 하는 GDB용 업스트림 MCP 서버

  • Coolsonickirby/smash-ultimate-research-setup — 이 프로젝트에서 사용된 수정된 .gdbinit.switchattach.py (자동 연결 스크립트)

  • blujay — 원본 .gdbinit.switch 명령어

  • GradualSyrupprint_addr_setup.py (주소-오프셋 해석)

  • Gdbinit (mammon_, elaine, pusillus, mong, zhang le, l0kit, truthix, fG!, gln) — 확장된 .gdbinit 구성

라이선스

MIT — LICENSE를 참조하세요.

Install Server
A
security – no known vulnerabilities
A
license - permissive license
B
quality - B tier

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sbergeron42/gdb-multiarch-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server