jcmturner/rpc
GitHub: jcmturner/rpc
一个基于 Go 的 RPC 库,实现了 Open Group CDE 1.1 标准中的 NDR 编码反序列化功能,将 NDR 字节流解码为 Go 结构体。
Stars: 8 | Forks: 2
# RPC
该项目现已转换为使用 Go modules。请参考最新的主版本子目录。
这遵循了 https://blog.golang.org/v2-go-modules 中概述的做法
[](https://github.com/jcmturner/rpc/releases)
本项目与 [CDE 1.1: Remote Procedure Call](http://pubs.opengroup.org/onlinepubs/9629399/) 相关
这是一个部分实现,主要侧重于将 NDR 编码的字节流反序列化为 Go 结构体。
## 求助
**需要参考测试向量**:由于标准文档中缺乏参考测试字节流,实现起来比较困难。如果没有这些,测试驱动开发将极具挑战性。
如果您了解 NDR 编码的参考测试向量来源,请通过提交 issue 并提供详细信息来告知我。非常感谢!
## 参考
* [Open Group RPC 出版物](http://pubs.opengroup.org/onlinepubs/9629399/)
* [Microsoft RPC 文档](https://docs.microsoft.com/en-us/windows/desktop/Rpc/rpc-start-page)
## NDR 解码能力清单
- [x] 格式标签
- [x] 布尔值
- [x] 字符
- [x] 无符号小整数
- [x] 无符号短整数
- [x] 无符号长整数
- [x] 无符号超整数
- [x] 有符号小整数
- [x] 有符号短整数
- [x] 有符号长整数
- [x] 有符号超整数
- [x] 单精度浮点数
- [x] 双精度浮点数
- [x] 一维定长数组
- [x] 多维定长数组
- [x] 一维一致性数组
- [x] 多维一致性数组
- [x] 一维一致性可变数组
- [x] 多维一致性可变数组
- [x] 可变字符串
- [x] 一致性可变字符串
- [x] 字符串数组
- [x] 联合体
- [x] 管道
## 来自 IDL 的结构体
[接口定义语言 (IDL)](http://pubs.opengroup.org/onlinepubs/9629399/chap4.htm)
### 字段是指针吗?
### 数组是一致性和/或可变的吗?
如果 IDL 定义包含以下属性之一,则数组是一致性的:
* min_is
* max_is
* size_is
如果 IDL 定义包含以下属性之一,则数组是可变的:
* last_is
* first_is
* length_is
#### 示例:
在以下示例中,SubAuthority[] 是一致性的:
```
typedef struct _RPC_SID {
unsigned char Revision;
unsigned char SubAuthorityCount;
RPC_SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
[size_is(SubAuthorityCount)] unsigned long SubAuthority[];
} RPC_SID,
*PRPC_SID,
*PSID;
```
在以下示例中,Buffer 是指向一致性可变数组的指针:
```
typedef struct _RPC_UNICODE_STRING {
unsigned short Length;
unsigned short MaximumLength;
[size_is(MaximumLength/2), length_is(Length/2)]
WCHAR* Buffer;
} RPC_UNICODE_STRING,
*PRPC_UNICODE_STRING;
```
### 联合体是封装的吗?
标签:EVTX分析, Go, NDR解码, Prisma Cloud, RPC库, Ruby工具, 数据序列化, 日志审计, 网络通信