问题标签 [kaitai-struct]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
386 浏览

kaitai-struct - kaitai 实例值三元:不能组合输出类型

.ksy我为两种非常相似的 Digilent 日志文件格式创建了 Kaitai 结构。第二种格式 ( openlogger) 是第一种格式 ( ) 的扩展,openscope结构中有两个附加字段。示波器基本上是一个单通道记录器;额外的记录器字段描述了活动通道的数量(a u1,最大 8)和采样顺序映射的通道(a u1 x 8)。

我试图通过为num_channelsand合成始终存在的字段来协调两种格式的界面channel_map;这对于该num_channels实例来说效果很好。但是我不知道如何为通道图创建一个合适的值,.ksy下面报错: /types/body/types/header/instances/channel_order/value: can't combine output types: ArrayType(Int1Type(false)) vs CalcBytesType

我不知道如何将if_false部分 ( [0]) 表示为 ArrayType。

有没有更好的方法来解决这个问题?

0 投票
2 回答
1167 浏览

java - 使用 Kaitai Struct 在 Java 中解析超过 2.15 GB 的文件

我正在使用 Kaitai-Struct 在 Java 中解析大型 PCAP 文件。每当文件大小超过Integer.MAX_VALUE字节时,我都会面临IllegalArgumentException由底层ByteBuffer.

我没有在其他地方找到对这个问题的引用,这让我相信这不是图书馆的限制,而是我使用它的方式的错误。

由于问题是由于尝试将整个文件映射到文件中引起的,因此ByteBuffer我认为解决方案将仅映射文件的第一个区域,并且随着数据的消耗,映射再次跳过已解析的数据。

由于这是在 Kaitai Struct Runtime 库中完成的,这意味着编写我自己的扩展 fom 的类KatiaiStream并覆盖自动生成的fromFile(...)方法,这似乎不是正确的方法。

从文件中解析 PCAP 类的自动生成方法是。

Kaitai ByteBufferKaitaiStreamStruct Runtime 库提供的ByteBuffer.

这反过来又受到ByteBuffer最大尺寸的限制。

我错过了一些明显的解决方法吗?这真的是对Java中Katiati Struct实现的限制吗?

0 投票
1 回答
167 浏览

kaitai-struct - 使用 Kaitai 捕获三个字节的二进制补码有符号整数

Kaitai Struct 提供了预定义的类型来捕获,例如,有符号的 2 字节整数 ( s2be) 或有符号的 4 字节整数 ( s4be),但没有s3beb24捕获 3 字节无符号整数 ( http://doc.kaitai.io/ksy_reference。 html#_bit_size_integers)。有没有办法做到这一点?

0 投票
1 回答
310 浏览

kaitai-struct - Kaitai Struct 外部文件中引用枚举

我想要一个 Kaitai Struct ksy 文件,它引用不同外部文件中的一些枚举和类型。在外部文件中,我只想有子类型和枚举定义。

这是引用外部类型的测试文件 ( test.ksy ):

这是包含外部类型的文件(rowing.ksy ):

编译器抱怨:

根据我的测试,我似乎可以使用前缀引用外部 rowing_position_message 类型,rowing::但我不能对枚举做同样的事情。如果我像rowing::rowing_messages::position编译器抱怨的那样做:

提前感谢您的任何想法。

0 投票
1 回答
119 浏览

python - 使用 pcap 模板时出现 Ipv6Packet 错误

尝试在 python 中使用 Kaitai Struct 读取 pcap。

我已经从文件创建了 pythonpcap.ksy文件

PYTHONPATH 设置为 xx 目录。现在,如果我运行一个简单的单行脚本来检查我是否可以加载模块

我收到这个错误

我的阅读是 python 路径是好的,python 模块正在从 pacp、以太网、ipv6 到 ipv4 沿着链向下工作。然后 ipv4 尝试再次加载 ipv6 并且脚本失败了。

我认为代码正在触发导入循环。

有人知道我在做什么错吗?

0 投票
1 回答
205 浏览

kaitai-struct - 将数组参数传递给 Kaitai Struct 用户定义类型

我正在尝试 Kaitai Struct 解码一些数据。我需要传递一个数组参数,但是 ksc 给出了一个错误。以下是示例代码:

它给出以下错误: cat_34: /types/fixed/seq/0/repeat-expr: unable to apply operation [] to CalcBytesType

0 投票
1 回答
187 浏览

kaitai-struct - Kaitai Struct中外部ksy文件中引用Kaitai Struct文件(ksy)

我正在尝试在 Kaitai Struct 中实现文件结构,这意味着我需要创建 ksy 文件可以被另一个 ksy 文件引用,所以当我编译成我的目标语言(在我的例子中是 java)时,java 代码将被优化并重用通常创建 ksy 文件,而不是冗余生成的 java 代码。

我试图模仿“在 Kaitai Struct 的外部文件中引用枚举”,但它没有用。

我开始研究“导入”,这意味着在外部 ksy 文件中导入 ksy 文件,我将广泛解释我试图做和实现的目标:

  1. 我为 data_types (自定义数据类型)创建了一个 ksy,它没有引用任何内容,只是带有 id 的元部分,然后是类型,我开始列出我所有的自定义数据类型(datatypeone,datatypetwo ...)
  2. 我为机器类型创建了一个 ksy,每种类型都有字段的“seq”,每个字段都引用上述数据类型之一,这里的挑战在于 machineType.ksy,我将 dataType.ksy 添加为导入,我不是很确定这样做的语法是什么,Webide 中的 Kaitai struct 编译器一直告诉我未定义的自定义数据类型,例如未定义 datatypeone。

是否对要引用的文件数量有任何限制,例如我可以从文件 b 中引用文件 a,从文件 c 中引用文件 b,从文件 d 中引用文件 c,这意味着文件 d 具有“c 的导入”并且文件 c 具有“b 的进口”等等。

0 投票
1 回答
326 浏览

kaitai-struct - Kaitai 结构参数类型

我正在尝试将参数传递给 ksy 文件。该参数是另一个 ksy 文件类型。原因是我需要访问作为参数传递的 ksy 文件中的所有字段。那可能吗?如果是,请您提供语法代码片段,以便我可以模仿它。如果不是,另一种解决方案是什么?

谢谢你。

在此处输入图像描述

在此处输入图像描述

0 投票
1 回答
317 浏览

ssh - Kaitai (KSY) - 可选属性

我正在尝试用Kaitai语言(.ksy 文件)描述SSH协议。一开始有如下格式的协议版本交换:

哪里SP comments是可选的。AFAIK,没有办法将属性描述为完全可选的,只能通过if条件。有谁知道如何在 Kaitai 中描述这种关系,以便解析器也接受这种格式:SSH-protoversion-softwareversion CR LF

谢谢

0 投票
1 回答
75 浏览

double - representing Double values in Katai

Some of the values I need to read in my ksy file are double's which I assume is a binary64 structure. The native data-types for a float won't stretch that far. Has anyone managed to represent this datatype in Kaitai ?