
impish, Rust로 작성된 크로스 플랫폼 바이너리 파싱 크레이트

Goblin은 rustc 1.85.0 (Rust 2024 에디션)이 필요합니다.
Cargo.toml에 추가하세요
[dependencies]
goblin = "0.10"
libgoblin은 바이너리 파싱, 로딩, 분석을 위한 원스톱 솔루션을 목표로 합니다.
libgoblin은 주로 다음과 같은 중요한 사용 사례를 지원합니다:
코어, std-프리 #[repr(C)] 구조체, 작은 컴파일 시간, 32/64 (또는 둘 다) 자유롭게.
타입 퍼닝. 한 타입에 함수를 정의하면 32비트 또는 64비트 변형에서 작동하도록 - 실제로 아무것도 변경하지 않고, 매크로도 없습니다! 기본 예제는 examples/automagic.rs를 참조하세요.
std 모드. Pread와 Pwrite를 통한 읽기/쓰기 구현, 파일 읽기, 편의 할당, 추가 메서드 등을 제공합니다. 이는 할당이 가능하고 디스크에서 바이너리를 읽고자 하는 클라이언트를 위한 것입니다.
Endian_fd. 정말 끔찍한 이름이죠 😆 이것은 panopticon이나 falcon과 같은 바이너리 분석에서 외부 엔디언의 바이너리를 읽어야 하거나, 크로스 플랫폼 외부 아키텍처 binutils를 구축하는 기반으로 사용됩니다. 예를 들어 cargo-sym과 bingrep이 간단한 예시이며, 가능성은 무한합니다.
이 크레이트로 할 수 있는 몇 가지 예시입니다 (구현을 도와서 완성할 수도 있습니다):
Pwrite에서 파생됨).no_std cfg를 사용하여 바이너리를 로드하세요. 즉, 기본적으로 구조체와 상수 정의(C 헤더와 같음)만 있을 뿐 - fd도, 출력도, std도 없습니다.libgoblin은 대규모로 구성 가능하도록 설계되었습니다. 현재 플래그는 다음과 같습니다:
repr(C) 구조체 정의repr(C) 구조체 정의repr(C) 구조체 정의repr(C) 구조체 정의repr(C) 구조체 정의repr(C) 구조체 정의repr(C) 구조체 정의no_std 환경을 허용관리자는 해당 백엔드에 대한 첫 번째 연락 리뷰어입니다. 이전 기여, 활동, 기본 지식, 그리고 우호적이고 사교적인 행동을 기준으로 선정됩니다 :D
현재 저(@m4b)만 모든 PR에 대한 병합 권한이 있습니다. 미래에는 해당 백엔드의 관리자도 병합 권한을 가질 가능성이 높습니다.
마지막으로, 저는 여전히 모든 PR에 대해 간략한 리뷰를 할 가능성이 높지만, 대부분/전적으로 해당 백엔드의 관리자에게 맡길 것입니다.
그리고 항상 Bill과 Ted의 지혜를 기억하세요: "서로에게 훌륭하게 행동하세요!"
모두 감사합니다 ❤️ !
사전순으로:
명시적으로 달리 언급되지 않는 한, 귀하의 기여는 함께 제공되는 LICENSE 파일(MIT)에 설명된 대로 라이선스가 부여됨에 동의합니다.