
rizin을 위한 심층적인 ghidra 디컴파일러 및 sleigh 디스어셈블러 통합
이것은 Rizin을 위한 Ghidra 디컴파일러 및 Sleigh 디스어셈블러의 통합입니다. 전적으로 Ghidra의 디컴파일러 부분만을 기반으로 하며, Ghidra 자체는 전혀 필요하지 않으며 플러그인은 단독으로 빌드될 수 있습니다. 이 프로젝트는 원래 radare2용으로 r2con 2019에서 Cutter 발표의 일부로 소개되었습니다: https://youtu.be/eHtMiezr7l8?t=950
Usage: pdg # Native Ghidra decompiler plugin
| pdg # Decompile current function with the Ghidra decompiler
| pdgd # Dump the debug XML Dump
| pdgx # Dump the XML of the current decompiled function
| pdgj # Dump the current decompiled function as JSON
| pdgo # Decompile current function side by side with offsets
| pdgs # Display loaded Sleigh Languages
| pdg* # Decompiled code is returned to rizin as comment
다음 설정 변수(e 명령어용)를 사용하여 rz-ghidra의 동작을 조정할 수 있습니다:
ghidra.cmt.cpp: C++ comment style
ghidra.cmt.indent: Comment indent
ghidra.indent: Indent increment
ghidra.lang: Custom Sleigh ID to override auto-detection (e.g. x86:LE:32:default)
ghidra.linelen: Max line length
ghidra.nl.brace: Newline before opening '{'
ghidra.nl.else: Newline before else
ghidra.sleighhome: SLEIGHHOME
여기서 ghidra.sleighhome은 디컴파일러가 지원해야 하는 아키텍처의 *.sla, *.lspec, ... 파일이 포함된 디렉터리를 가리켜야 합니다. 하지만 rz-pm 패키지를 사용하거나 아래와 같이 설치할 때 자동으로 설정됩니다.
먼저, 이 저장소에 포함된 서브모듈을 가져와 최신 상태로 유지하세요:
git submodule init
git submodule update
그런 다음, Rizin 플러그인을 다음과 같이 빌드하고 설치할 수 있습니다:
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
여기서 CMAKE_INSTALL_PREFIX를 Rizin이 플러그인을 로드할 수 있는 위치로 설정하세요. 설치 단계는 필수적입니다. 이 단계에서 필요한 Sleigh 파일도 설치되기 때문입니다. Rizin을 git에서 사용 중이라면 CMAKE_PREFIX_PATH도 Rizin 설치 디렉터리로 설정하세요.
Cutter 플러그인도 빌드하려면 Cutter가 소스에서 특정 prefix로 설치되어 있어야 합니다. 선택적으로 -DCMAKE_PREFIX_PATH=<path>로 지정할 수 있으며, 그런 다음 -DBUILD_CUTTER_PLUGIN=ON을 cmake에 전달하여 플러그인을 활성화합니다:
/my/path/rz-ghidra> mkdir build && cd build
/my/path/rz-ghidra/build> cmake -DBUILD_CUTTER_PLUGIN=ON -DCMAKE_PREFIX_PATH=/path/to/cutter/prefix -DCMAKE_INSTALL_PREFIX=~/.local ..
/my/path/rz-ghidra/build> make && make install
기본적으로 Cutter 플러그인은 현재 사용자의 홈 디렉터리에서 자동으로 선택된 경로에 설치됩니다. 이 경로는 -DCUTTER_INSTALL_PLUGDIR로 재정의할 수 있습니다.
Rizin은 빠르게 진화하는 C API를 가지고 있으므로 rz-ghidra의 어떤 버전이 Rizin의 어떤 버전과 호환되는지 명시해야 합니다:
Rizin과 rz-ghidra를 git에서 사용하는 경우:
dev 브랜치는 Rizin dev 브랜치를 따릅니다.stable 브랜치는 Rizin stable 브랜치를 따릅니다.릴리스와 관련하여, rz-ghidra는 일반적으로 Rizin과 동시에 릴리스되며 종종 동일한 버전 번호를 사용합니다(보장되지는 않으니 이 번호에 의존하지 마세요!). 또한, 각 Rizin 릴리스와 함께 rz-ghidra에 rz-0.1.2와 같은 태그가 생성되며, 이는 정확히 rz-ghidra 릴리스를 가리키며 해당 릴리스가 지정된 Rizin 버전과 호환됨을 나타냅니다. 이러한 태그는 배포판 관리자가 종속성을 설정하는 방법을 찾는 데 사용할 수 있습니다.
이 플러그인은 Ghidra의 라이선스보다 더 엄격한 LGPLv3에 따라 제공됩니다!
이 프로그램은 자유 소프트웨어입니다: 자유 소프트웨어 재단이 발표한 GNU Lesser General Public License 버전 3 또는 (선택에 따라) 이후 버전의 조건에 따라 재배포 및/또는 수정할 수 있습니다.
이 프로그램은 유용할 것이라는 희망으로 배포되지만, 어떠한 보증도 없이 배포됩니다. 상품성 또는 특정 목적에의 적합성에 대한 묵시적 보증조차 없습니다. 자세한 내용은 GNU Lesser General Public License를 참조하세요.
이 프로그램과 함께 GNU Lesser General Public License의 사본을 받았을 것입니다. 그렇지 않다면 https://www.gnu.org/licenses/를 방문하세요.