没有模式的解码 protobuf

问题描述 投票:0回答:2

是否可以使用工具或任何可以将二进制数据解码为可读格式的工具来解码没有模式的 protobuf 序列化文件?

c# protobuf-net
2个回答
16
投票

您通常可以推导模式。事实上,IIRC“protoc”工具有一组参数(

--decode_raw
,iirc),它可以精确地做到这一点——做出有根据的猜测。然而,它是一个猜测——格式是模棱两可的,因为多种不同类型的数据可以存储在相同的机制中——例如,一个长度前缀的块可以是:

  • 一个子对象(任何用户类型)
  • 打包数组(各种原始类型)
  • 一个 utf-8 字符串
  • 原始字节[]
  • 可能还有其他我忘记的东西

同样,一个 4 字节的固定宽度块可以是一个固定宽度的整数,也可以是一个浮点数;整数可以是有符号的或无符号的。


0
投票

我使用

protoc --decode_raw
,就像@Marc Gravell 说的,但如果您想在 javascript 或 CLI 上执行它,我的工具/库 rawproto 可以很方便,用于编程访问,例如导入输出的 JSON 和解析它与普通的东西。如果您想构建自己的 HTML/javascript GUI 工具来处理原始 protobuf,您也可以在网络上使用它。

你的问题具体是关于 C# 的,但你可能会从我的事情中得到灵感,或者能够使用它来生成原型 SDL(这通常需要一些手动调整,但可以作为逆向工程的良好开端proto),你可以在普通的 C# protobuf 中使用它。

© www.soinside.com 2019 - 2024. All rights reserved.