【问题标题】:Is there any way to decompiler google protobuf binary file(.pb file) to .proto file有什么方法可以将 google protobuf 二进制文件(.pb 文件)反编译为 .proto 文件
【发布时间】:2019-07-29 08:33:03
【问题描述】:

当我反转 apk 时,我得到了 .pb 文件但没有 .proto 文件,有没有办法将此文件反编译为 .proto 文件,或者我可以从这个 .pb 文件生成 java 代码?

【问题讨论】:

  • .pb 文件 - 它是 数据 吗?或者它是一个编译的描述符集?如果是数据:你必须对其进行逆向工程——有工具可以提供帮助,所以不一定很难。如果是编译的描述符集:容易得多。 Protoc 有一个查看原始有效载荷的工具,我的在线工具在这里 protogen.marcgravell.com/decode
  • 是编译后的描述符集。你的意思是 --decode_raw 吗?有什么办法可以直接获取 .proto 文件?
  • 问题:你需要 .proto for 做什么?是为了编辑吗?如果是用于代码生成,IIRC protoc 将接受编译后的描述符集作为输入(或者您可以直接调用插件 - 插件的工作方式是将编译后的描述符集通过管道传输到标准输入)
  • 用于java代码生成。哪个插件? protoc 可能无法由该文件生成

标签: protocol-buffers protobuf-java


【解决方案1】:

如果(根据 cmets)您拥有的文件是已编译的描述符集,那么您可以使用 protoc 从中生成 任何 语言(它通常支持);只需在命令行中使用--descriptor_set_in=FILES 选项将您的文件指定为输入(代替FILES),然后使用--java_out=OUT_DIR(或其他)来指示输出语言和位置。

【讨论】:

  • 这实际上是如何工作的?当我使用命令 protoc --description_set_in=./myfile.pb --java_out=。我收到错误“缺少输入文件。”。当我在末尾添加一个空文件时(无论它是否存在)。我收到一个错误“没有这样的文件或目录”。
  • @Kevin descriptor_set_in,而不是 description_set_in
  • 对不起。是错字。我使用的是descriptor_set_in
  • @Kevin 哎呀,我的错 - 你仍然需要指定文件 - 它会检查描述符集 测试文件之前。所以:试试protoc --descriptor_set_in=your.pb --java_out=somedir your.proto - 我刚刚在本地测试过,效果很好(驱动器中没有your.proto);唯一的技巧是:知道描述符集中的文件名。如果您无法弄清楚,我可能会提取它
  • 嗯,Unknown flag: --descriptor_set_in,版本 3.14.0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多