当前位置: 首页 > 知识库问答 >
问题:

解码protobuf二进制文件--获取“无法解析输入”

贺景铄
2023-03-14

我尝试使用protoc解码protobuf二进制消息,但遇到“无法解析输入”错误。我尝试了两种协议--decode\u raw

我在SO中读到了两个线程,其中一个线程表明protoc-decode不是百分之百可靠的,另一个线程表明需要手动剥离开头的消息长度数据。我的问题是

  • 如何使用protoc工具对proto二进制文件进行解码
  • 该工具不能百分之百可靠地进行解码(即使我提供类型),或者消息在反序列化之前需要一些黑客攻击,这是真的吗?(这就引出了一个问题,protoc——decode选项的目的是什么

附言:我使用的是协议3.6.1,消息是在一个Java程序中创建的(语法=协议2)

共有1个答案

许丁雷
2023-03-14

如果你把你谈论的线索联系起来,那会有帮助的。

但一般来说,是的,在使用protoc解码之前,需要去掉长度前缀。关于如何为protobuf消息添加前缀长度没有标准,有些使用fixed32前缀,有些使用varint前缀,有些使用更长的头。因此,protoc工具无法解析长度标头。

我还没有见过任何情况下,协议--decode不会解码有效的消息。但是它对错误的容忍度很小,比如截断的数据——即使只有一个字段被损坏,它也总是拒绝整个消息。

为了更好地进行调试,您可以使用此工具,它逐字节解码并显示发生的第一个错误:https://protogen.marcgravell.com/decode

 类似资料:
  • 我有一个包含编码protobuf数据的coredump,我想解码这个数据并查看内容。我有.proto文件,它在原始协议缓冲区中定义了此消息。我的proto文件如下所示: 和协议版本: 我尝试了以下方法: > 从内核转储原始数据 传给protoc

  • 问题内容: 我有一个混合二进制数据和文本数据的文件。我想通过正则表达式解析它,但出现此错误: 我猜该消息意味着Python不想解析二进制文件。我正在打开带有标志的文件。 如何在Python中使用正则表达式解析二进制文件? 编辑: 我正在使用Python 3.2.0 问题答案: 我认为您使用Python 3。 1.以 二进制模式 打开文件很简单但是很微妙。与在文本模式下打开它的唯一区别是mode参数

  • 难道不应该从它的二进制文件中获得源代码吗?既然编译是将高级语言(源代码)转换为低级语言(机器代码)的过程,难道我们不能为了获得源代码而直接反转这个过程吗?如果没有,为什么?

  • 本文向大家介绍C#读取二进制文件方法分析,包括了C#读取二进制文件方法分析的使用技巧和注意事项,需要的朋友参考一下 本文较为详细的分析了C#读取二进制文件方法。分享给大家供大家参考。具体分析如下: 当想到所有文件都转换为 XML时,确实是一件好事。但是,这并非事实。仍旧还有大量的文件格式不是XML,甚至也不是ASCII。二进制文件仍然在网络中传播,储存在磁盘上,在应用程序之间传递。相比之下,在处理

  • 我没有得到任何警告,应用程序成功构建。但是,如果我尝试在连接的设备上运行它,它会崩溃,并出现以下错误(摘要): java.lang.NoClassDefoundError:解析:lcom/google/android/gms/r$string失败; 在com.google.android.gms.measurement.zza.(来源不明) ... 原因:java.lang.ClassNotFou

  • 用 tauri + Vue3 + markdown-it 构建的 markdown 解析工具。其中 template 的内容使用 v-html 绑定,所以解析出的图片是相对路径。 使用 npm run tauri dev 时顺利渲染,但是在 npm run tauri build 后,由于安全设置的问题,前端无法读取图片,此时路径依然显示相对路径 ../img/xxx.png,实际为 https: