You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASN.1语法正确性验证及兼容改写技术咨询

关于ASN.1语法报错与改写的解答

我来帮你一步步理清这个问题:

1. 该语句是否符合2002版ASN.1标准语法?

答案是否定的。你遇到的! RejectProblem:general-unrecognizedPDU部分不是标准2002 ASN.1的语法。

在标准ASN.1 2002规范中,CONSTRAINED BY的语法定义是:

CONSTRAINED BY <constraint-specification>

这里的<constraint-specification>只能是符合ASN.1规则的约束表达式,标准里完全没有!后缀这种用法。

2. 这是不是扩展语法?

是的,这是Wireshark的asn2wrs.py工具独有的扩展语法。

asn2wrs是Wireshark团队为了适配自身协议解析需求开发的工具,这个!后缀是它用来关联ASN.1类型与Wireshark内部错误处理逻辑(比如映射到特定的RejectProblem错误码)的私有标记,不属于任何ASN.1标准规范。这也是为什么asn2wrs能处理,但严格遵循标准的asn1c会报错。

3. 能否改写为不改变生成C结构的等效语句?

完全可以!因为!后面的内容只是Wireshark特定的元数据,不影响ASN.1类型的核心结构定义,所以我们只需要把这部分内容移到标准ASN.1注释中,就能让asn1c正常解析,同时生成的C结构和原语句完全一致。

改写示例:

原报错语句:

CONSTRAINED BY { -- must conform to the above definition --} ! RejectProblem:general-unrecognizedPDU

改写后(两种可选方式):

方式1:将扩展标记移到独立注释

CONSTRAINED BY { -- must conform to the above definition -- }
-- Wireshark-specific metadata: ! RejectProblem:general-unrecognizedPDU

方式2:将扩展标记嵌入原有注释块

CONSTRAINED BY { -- must conform to the above definition -- ! RejectProblem:general-unrecognizedPDU -- }

这两种改写方式都符合标准ASN.1语法,asn1c能正常解析,同时保留了原有的Wireshark相关元数据(如果之后还要用asn2wrs处理,只要注释格式能被它识别即可),生成的C代码结构和原语句完全没有区别——因为CONSTRAINED BY本身在asn1c生成代码时大多是注释性约束,不会直接影响C结构体的字段定义。

内容的提问来源于stack exchange,提问作者qwe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 22:17:41