问题标签 [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.
kaitai-struct - kaitai 实例值三元:不能组合输出类型
.ksy
我为两种非常相似的 Digilent 日志文件格式创建了 Kaitai 结构。第二种格式 ( openlogger
) 是第一种格式 ( ) 的扩展,openscope
结构中有两个附加字段。示波器基本上是一个单通道记录器;额外的记录器字段描述了活动通道的数量(a u1
,最大 8)和采样顺序映射的通道(a u1 x 8
)。
我试图通过为num_channels
and合成始终存在的字段来协调两种格式的界面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。
有没有更好的方法来解决这个问题?
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 ByteBufferKaitaiStream
Struct Runtime 库提供的ByteBuffer
.
这反过来又受到ByteBuffer
最大尺寸的限制。
我错过了一些明显的解决方法吗?这真的是对Java中Katiati Struct实现的限制吗?
kaitai-struct - 使用 Kaitai 捕获三个字节的二进制补码有符号整数
Kaitai Struct 提供了预定义的类型来捕获,例如,有符号的 2 字节整数 ( s2be
) 或有符号的 4 字节整数 ( s4be
),但没有s3be
并b24
捕获 3 字节无符号整数 ( http://doc.kaitai.io/ksy_reference。 html#_bit_size_integers)。有没有办法做到这一点?
kaitai-struct - Kaitai Struct 外部文件中引用枚举
我想要一个 Kaitai Struct ksy 文件,它引用不同外部文件中的一些枚举和类型。在外部文件中,我只想有子类型和枚举定义。
这是引用外部类型的测试文件 ( test.ksy ):
这是包含外部类型的文件(rowing.ksy ):
编译器抱怨:
根据我的测试,我似乎可以使用前缀引用外部 rowing_position_message 类型,rowing::
但我不能对枚举做同样的事情。如果我像rowing::rowing_messages::position
编译器抱怨的那样做:
提前感谢您的任何想法。
python - 使用 pcap 模板时出现 Ipv6Packet 错误
尝试在 python 中使用 Kaitai Struct 读取 pcap。
我已经从文件创建了 pythonpcap.ksy
文件
PYTHONPATH 设置为 xx 目录。现在,如果我运行一个简单的单行脚本来检查我是否可以加载模块
我收到这个错误
我的阅读是 python 路径是好的,python 模块正在从 pacp、以太网、ipv6 到 ipv4 沿着链向下工作。然后 ipv4 尝试再次加载 ipv6 并且脚本失败了。
我认为代码正在触发导入循环。
有人知道我在做什么错吗?
kaitai-struct - 将数组参数传递给 Kaitai Struct 用户定义类型
我正在尝试 Kaitai Struct 解码一些数据。我需要传递一个数组参数,但是 ksc 给出了一个错误。以下是示例代码:
它给出以下错误: cat_34: /types/fixed/seq/0/repeat-expr: unable to apply operation [] to CalcBytesType
kaitai-struct - Kaitai Struct中外部ksy文件中引用Kaitai Struct文件(ksy)
我正在尝试在 Kaitai Struct 中实现文件结构,这意味着我需要创建 ksy 文件可以被另一个 ksy 文件引用,所以当我编译成我的目标语言(在我的例子中是 java)时,java 代码将被优化并重用通常创建 ksy 文件,而不是冗余生成的 java 代码。
我试图模仿“在 Kaitai Struct 的外部文件中引用枚举”,但它没有用。
我开始研究“导入”,这意味着在外部 ksy 文件中导入 ksy 文件,我将广泛解释我试图做和实现的目标:
- 我为 data_types (自定义数据类型)创建了一个 ksy,它没有引用任何内容,只是带有 id 的元部分,然后是类型,我开始列出我所有的自定义数据类型(datatypeone,datatypetwo ...)
- 我为机器类型创建了一个 ksy,每种类型都有字段的“seq”,每个字段都引用上述数据类型之一,这里的挑战在于 machineType.ksy,我将 dataType.ksy 添加为导入,我不是很确定这样做的语法是什么,Webide 中的 Kaitai struct 编译器一直告诉我未定义的自定义数据类型,例如未定义 datatypeone。
是否对要引用的文件数量有任何限制,例如我可以从文件 b 中引用文件 a,从文件 c 中引用文件 b,从文件 d 中引用文件 c,这意味着文件 d 具有“c 的导入”并且文件 c 具有“b 的进口”等等。
ssh - Kaitai (KSY) - 可选属性
我正在尝试用Kaitai语言(.ksy 文件)描述SSH协议。一开始有如下格式的协议版本交换:
哪里SP comments
是可选的。AFAIK,没有办法将属性描述为完全可选的,只能通过if
条件。有谁知道如何在 Kaitai 中描述这种关系,以便解析器也接受这种格式:SSH-protoversion-softwareversion CR LF
?
谢谢
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 ?