10个稳定版本

2.5.1 2024年8月9日
2.4.0 2024年3月25日
2.3.7 2024年2月28日
2.3.4 2024年1月28日
2.2.1 2023年10月8日

#315 in 解析器实现

Download history 2/week @ 2024-05-20 47/week @ 2024-07-01 79/week @ 2024-07-29 96/week @ 2024-08-05

每月 175 次下载

MIT 许可证

96KB
2K SLoC

mapfile_parser

PyPI - Downloads GitHub License GitHub release (latest SemVer) PyPI crate.io GitHub contributors

专注于反编译项目的Map文件解析库。

此库适用于Python3和Rust

特性

  • 用Rust编写的快速解析。
  • 支持映射格式
    • GNU ld
    • clang lld
  • 内置的cli工具以处理解析后的映射文件(见示例)。

安装

Python版本

请访问https://pypi.ac.cn/project/mapfile_parser/了解此包。

推荐的安装方法是使用PyPi发行版,通过pip

python3 -m pip install -U mapfile_parser

如果你在你的存储库中使用requirements.txt文件,那么你可以通过以下行添加此库

mapfile_parser>=2.5.1,<3.0.0

开发版本

不稳定开发版本位于develop分支。应将PR提交到该分支而不是主分支。

推荐的方法是使用带有-e(可编辑)标志的pip安装本地克隆的仓库。

python3 -m pip install -e .

如果你想在不知道自己在做什么的情况下玩最新的开发版本,可以使用以下命令

python3 -m pip uninstall mapfile_parser
python3 -m pip install git+https://github.com/Decompollaborate/mapfile_parser.git@develop

注意:除非你知道自己在做什么,否则不建议安装开发版本。自行承担风险。

Rust版本

请访问https://crates.io/crates/mapfile_parser了解此crate。

要使用Cargo将此库添加到您的项目中

cargo add mapfile_parser

或者手动将以下行添加到您的Cargo.toml文件中

mapfile_parser = "2.5.1"

版本控制和变更日志

该库遵循语义化版本控制。我们努力保持向后兼容性,因此直到下一个主版本发布(例如从2.X.X跳转到3.0.0)之前,不应该出现破坏性的更改。

要查看每个版本的变化,请检查CHANGELOG.md文件,或者查看Github上的发布页面。您也可以使用此链接来检查最新版本。

示例

各种命令行示例提供在frontends文件夹中。其中大部分是使用此库重新实现已存在的工具,以展示如何使用此库并激发新想法。

您可以使用python3 -m mapfile_parser --help在运行时检查列表。

您可以使用python3 -m mapfile_parser 实用工具名称执行每个工具,例如python3 -m mapfile_parser pj64_syms

  • bss_check:检查全局可见的bss是否没有被重新排序。
  • first_diff:找出构建的ROM与基础ROM之间的第一个差异。
  • jsonify:将mapfile转换为json格式。
  • pj64_syms:生成与PJ64兼容的符号映射。
  • progress:计算匹配函数的当前进度。依赖于一个splat文件夹结构,并且每个匹配的函数不再有一个.s文件(即:匹配后删除该文件)。
  • sym_info:显示有关符号或地址的各种信息。
  • symbol_sizes_csv:通过解析map文件生成一个总结文件大小的csv。
  • upload_frogress:将匹配函数的当前进度(由progress实用工具计算)上传到frogress

提供的所有命令行实用工具都不应直接在命令行上使用,因为它们需要大量的长参数,并且每个仓库都有其独特的怪癖,需要对其进行适配。这些主要是为了方便人们以适应他们自己的仓库的方式来编写这些实用工具。

依赖

~2.2–9MB
~72K SLoC