fe2a6db786
rust / build / test / clippy / fmt (push) Has been cancelled
Layout:
- src/ .NET 10 x64 reference: MxNativeCodec, MxNativeClient,
MxAsbClient, probes, tests, harnesses. Executable spec.
- design/ Architectural plan for the Rust port (M0–M6), error
model, protocol invariants, risks (R1–R16), adversarial
review log (review.md).
- rust/ Rust workspace. M0 skeleton + M1 codec parity.
mxaccess-codec: 215 unit tests + 2 cross-implementation
parity tests (byte-identical against .NET reference).
Other crates are M0 stubs awaiting M2+.
- captures/ Frida + netsh + pcap evidence per CLAUDE.md
("captures are evidence, not throwaway logs").
- analysis/ Decompiled C# (frida/proxy/decompiled-*),
Ghidra exports for native DLLs (`exports/` only —
working state at `projects/` and AVEVA's input
binaries at `input/` are gitignored).
- docs/ Reverse-engineering reference docs.
- tools/ Setup-LiveProbeEnv.ps1 (Infisical credential fetcher),
Compute-Crc.ps1 (.NET parity helper).
- .github/workflows/ Rust CI: fmt + build + test + clippy on Windows.
- LICENSE MIT (Joseph Doherty, 2026).
Verified:
- cargo test --workspace → 217 passed (215 unit + 2 .NET parity), 0 failed
- cargo clippy --workspace -- -D warnings → clean
- cargo fmt --all -- --check → clean
- cargo publish --dry-run -p mxaccess-codec → packages cleanly
Excluded from history (see .gitignore):
- **/bin, **/obj, **/target — build artifacts
- analysis/ghidra/projects/ — Ghidra working state (regenerable)
- analysis/ghidra/input/ — AVEVA proprietary DLLs (vendor IP)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
27 lines
12 KiB
Plaintext
27 lines
12 KiB
Plaintext
interface_index interface_name iid method_index method_name proc_offset proc_va opnum x86_stack_size client_buffer_size server_buffer_size proc_flags param_count oi2_flags oi2_ext_flags raw_header params
|
|
0 INmxService2 2630A513-A974-4B1A-8025-457A9A7C56B8 3 RegisterEngine 0x0054 0x100075fe 3 20 8 8 0x46 4 0x08 0x05 33 6c 00 00 00 00 03 00 14 00 08 00 08 00 46 04 08 05 00 00 01 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x008b(must_size|must_free|in|by_value),stack=8,type=type+0x002c @0x1000792e [0xb4, 0x83, 0x00, 0x00, FC_USMALL, 0x00, 0x00, 0x00, 0xde, 0xff, FC_IP, FC_CONSTANT_IID, 0xf7, 0x92, 0x9f, 0xb4, 0x48, 0xc7]; p2:flags=0x000b(must_size|must_free|in),stack=12,type=type+0x0036 @0x10007938 [FC_IP, FC_CONSTANT_IID, 0xf7, 0x92, 0x9f, 0xb4, 0x48, 0xc7, 0x69, 0x41, 0x8e, 0xca, 0xa0, 0x67, FC_HYPER, 0x01, 0x27, FC_NO_REPEAT]; p3:flags=0x0070(out|return|base_type),stack=16,type=FC_LONG
|
|
0 INmxService2 2630A513-A974-4B1A-8025-457A9A7C56B8 4 UnRegisterEngine 0x0084 0x1000762e 4 12 8 8 0x44 2 0x08 0x01 33 6c 00 00 00 00 04 00 0c 00 08 00 08 00 44 02 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0070(out|return|base_type),stack=8,type=FC_LONG
|
|
0 INmxService2 2630A513-A974-4B1A-8025-457A9A7C56B8 5 Connect 0x00a8 0x10007652 5 24 32 8 0x44 5 0x08 0x01 33 6c 00 00 00 00 05 00 18 00 20 00 08 00 44 05 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0048(in|base_type),stack=12,type=FC_LONG; p3:flags=0x0048(in|base_type),stack=16,type=FC_LONG; p4:flags=0x0070(out|return|base_type),stack=20,type=FC_LONG
|
|
0 INmxService2 2630A513-A974-4B1A-8025-457A9A7C56B8 6 TransferData 0x00de 0x10007688 6 28 32 8 0x46 6 0x08 0x05 33 6c 00 00 00 00 06 00 1c 00 20 00 08 00 46 06 08 05 00 00 01 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0048(in|base_type),stack=12,type=FC_LONG; p3:flags=0x0048(in|base_type),stack=16,type=FC_LONG; p4:flags=0x010b(must_size|must_free|in|simple_ref),stack=20,type=type+0x004c @0x1000794e [FC_CARRAY, 0x00, 0x01, 0x00, 0x28, 0x00, FC_ERROR_STATUS_T, 0x00, 0x01, 0x00, 0x01, FC_END, FC_RP, FC_DOUBLE, FC_LONG, FC_PAD, FC_IP, FC_CONSTANT_IID]; p5:flags=0x0070(out|return|base_type),stack=24,type=FC_LONG
|
|
0 INmxService2 2630A513-A974-4B1A-8025-457A9A7C56B8 7 AddSubscriberEngine 0x011a 0x100076c4 7 24 32 8 0x44 5 0x08 0x01 33 6c 00 00 00 00 07 00 18 00 20 00 08 00 44 05 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0048(in|base_type),stack=12,type=FC_LONG; p3:flags=0x0048(in|base_type),stack=16,type=FC_LONG; p4:flags=0x0070(out|return|base_type),stack=20,type=FC_LONG
|
|
0 INmxService2 2630A513-A974-4B1A-8025-457A9A7C56B8 8 RemoveSubscriberEngine 0x0150 0x100076fa 8 24 32 8 0x44 5 0x08 0x01 33 6c 00 00 00 00 08 00 18 00 20 00 08 00 44 05 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0048(in|base_type),stack=12,type=FC_LONG; p3:flags=0x0048(in|base_type),stack=16,type=FC_LONG; p4:flags=0x0070(out|return|base_type),stack=20,type=FC_LONG
|
|
0 INmxService2 2630A513-A974-4B1A-8025-457A9A7C56B8 9 SetHeartbeatSendInterval 0x0186 0x10007730 9 16 16 8 0x44 3 0x08 0x01 33 6c 00 00 00 00 09 00 10 00 10 00 08 00 44 03 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0070(out|return|base_type),stack=12,type=FC_LONG
|
|
0 INmxService2 2630A513-A974-4B1A-8025-457A9A7C56B8 10 RegisterEngine2 0x01b0 0x1000775a 10 24 16 8 0x46 5 0x08 0x05 33 6c 00 00 00 00 0a 00 18 00 10 00 08 00 46 05 08 05 00 00 01 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x008b(must_size|must_free|in|by_value),stack=8,type=type+0x002c @0x1000792e [0xb4, 0x83, 0x00, 0x00, FC_USMALL, 0x00, 0x00, 0x00, 0xde, 0xff, FC_IP, FC_CONSTANT_IID, 0xf7, 0x92, 0x9f, 0xb4, 0x48, 0xc7]; p2:flags=0x0048(in|base_type),stack=12,type=FC_LONG; p3:flags=0x000b(must_size|must_free|in),stack=16,type=type+0x0036 @0x10007938 [FC_IP, FC_CONSTANT_IID, 0xf7, 0x92, 0x9f, 0xb4, 0x48, 0xc7, 0x69, 0x41, 0x8e, 0xca, 0xa0, 0x67, FC_HYPER, 0x01, 0x27, FC_NO_REPEAT]; p4:flags=0x0070(out|return|base_type),stack=20,type=FC_LONG
|
|
0 INmxService2 2630A513-A974-4B1A-8025-457A9A7C56B8 11 GetPartnerVersion 0x01e6 0x10007790 11 24 24 36 0x44 5 0x08 0x01 33 6c 00 00 00 00 0b 00 18 00 18 00 24 00 44 05 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0048(in|base_type),stack=12,type=FC_LONG; p3:flags=0x2150(out|base_type|simple_ref|0x2000),stack=16,type=FC_LONG; p4:flags=0x0070(out|return|base_type),stack=20,type=FC_LONG
|
|
1 INmxSvcStatistics 6EB90E4C-DF5C-47F0-B2CD-110549C1162A 3 GetNmxSvcStatistics 0x0312 0x100078bc 3 12 0 124 0x44 2 0x08 0x01 33 6c 00 00 00 00 03 00 0c 00 00 00 7c 00 44 02 08 01 00 00 00 00 00 00 p0:flags=0x0112(must_free|out|simple_ref),stack=4,type=type+0x0076 @0x10007978 [FC_STRUCT, FC_SMALL, 0x50, 0x00, FC_LONG, FC_LONG, FC_LONG, FC_LONG, FC_LONG, FC_LONG, FC_LONG, FC_LONG, FC_LONG, FC_LONG, FC_LONG, FC_LONG, FC_LONG, FC_LONG]; p1:flags=0x0070(out|return|base_type),stack=8,type=FC_LONG
|
|
1 INmxSvcStatistics 6EB90E4C-DF5C-47F0-B2CD-110549C1162A 4 ResetSvcStatistics 0x0336 0x100078e0 4 8 0 8 0x44 1 0x08 0x01 33 6c 00 00 00 00 04 00 08 00 00 00 08 00 44 01 08 01 00 00 00 00 00 00 p0:flags=0x0070(out|return|base_type),stack=4,type=FC_LONG
|
|
2 INmxStatus 4CA783BC-F68E-42F4-9D76-8107C826F625 3 OPENCONNECTION 0x027c 0x10007826 3 32 24 64 0x46 7 0x08 0x01 33 6c 00 00 00 00 03 00 20 00 18 00 40 00 46 07 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x000b(must_size|must_free|in),stack=8,type=type+0x005c @0x1000795e [FC_IP, FC_CONSTANT_IID, 0xea, 0x9a, 0x84, 0x73, 0x2a, 0x47, FC_STRUCT, 0x47, 0xb8, 0xc6, 0x1c, 0x80, 0x6a, 0xf1, 0x2d, 0xfc]; p2:flags=0x0048(in|base_type),stack=12,type=FC_LONG; p3:flags=0x0048(in|base_type),stack=16,type=FC_LONG; p4:flags=0x2150(out|base_type|simple_ref|0x2000),stack=20,type=FC_LONG; p5:flags=0x2150(out|base_type|simple_ref|0x2000),stack=24,type=FC_ENUM32; p6:flags=0x0070(out|return|base_type),stack=28,type=FC_LONG
|
|
2 INmxStatus 4CA783BC-F68E-42F4-9D76-8107C826F625 4 CloseConnection 0x02be 0x10007868 4 16 8 36 0x44 3 0x08 0x01 33 6c 00 00 00 00 04 00 10 00 08 00 24 00 44 03 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x2150(out|base_type|simple_ref|0x2000),stack=8,type=FC_ENUM32; p2:flags=0x0070(out|return|base_type),stack=12,type=FC_LONG
|
|
2 INmxStatus 4CA783BC-F68E-42F4-9D76-8107C826F625 5 GetConnectionStatus 0x02e8 0x10007892 5 16 8 36 0x44 3 0x08 0x01 33 6c 00 00 00 00 05 00 10 00 08 00 24 00 44 03 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x2150(out|base_type|simple_ref|0x2000),stack=8,type=FC_ENUM32; p2:flags=0x0070(out|return|base_type),stack=12,type=FC_LONG
|
|
3 INmxService 575008DB-845D-46C6-A906-F6F8CA86F315 3 RegisterEngine 0x0054 0x100075fe 3 20 8 8 0x46 4 0x08 0x05 33 6c 00 00 00 00 03 00 14 00 08 00 08 00 46 04 08 05 00 00 01 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x008b(must_size|must_free|in|by_value),stack=8,type=type+0x002c @0x1000792e [0xb4, 0x83, 0x00, 0x00, FC_USMALL, 0x00, 0x00, 0x00, 0xde, 0xff, FC_IP, FC_CONSTANT_IID, 0xf7, 0x92, 0x9f, 0xb4, 0x48, 0xc7]; p2:flags=0x000b(must_size|must_free|in),stack=12,type=type+0x0036 @0x10007938 [FC_IP, FC_CONSTANT_IID, 0xf7, 0x92, 0x9f, 0xb4, 0x48, 0xc7, 0x69, 0x41, 0x8e, 0xca, 0xa0, 0x67, FC_HYPER, 0x01, 0x27, FC_NO_REPEAT]; p3:flags=0x0070(out|return|base_type),stack=16,type=FC_LONG
|
|
3 INmxService 575008DB-845D-46C6-A906-F6F8CA86F315 4 UnRegisterEngine 0x0084 0x1000762e 4 12 8 8 0x44 2 0x08 0x01 33 6c 00 00 00 00 04 00 0c 00 08 00 08 00 44 02 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0070(out|return|base_type),stack=8,type=FC_LONG
|
|
3 INmxService 575008DB-845D-46C6-A906-F6F8CA86F315 5 Connect 0x00a8 0x10007652 5 24 32 8 0x44 5 0x08 0x01 33 6c 00 00 00 00 05 00 18 00 20 00 08 00 44 05 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0048(in|base_type),stack=12,type=FC_LONG; p3:flags=0x0048(in|base_type),stack=16,type=FC_LONG; p4:flags=0x0070(out|return|base_type),stack=20,type=FC_LONG
|
|
3 INmxService 575008DB-845D-46C6-A906-F6F8CA86F315 6 TransferData 0x00de 0x10007688 6 28 32 8 0x46 6 0x08 0x05 33 6c 00 00 00 00 06 00 1c 00 20 00 08 00 46 06 08 05 00 00 01 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0048(in|base_type),stack=12,type=FC_LONG; p3:flags=0x0048(in|base_type),stack=16,type=FC_LONG; p4:flags=0x010b(must_size|must_free|in|simple_ref),stack=20,type=type+0x004c @0x1000794e [FC_CARRAY, 0x00, 0x01, 0x00, 0x28, 0x00, FC_ERROR_STATUS_T, 0x00, 0x01, 0x00, 0x01, FC_END, FC_RP, FC_DOUBLE, FC_LONG, FC_PAD, FC_IP, FC_CONSTANT_IID]; p5:flags=0x0070(out|return|base_type),stack=24,type=FC_LONG
|
|
3 INmxService 575008DB-845D-46C6-A906-F6F8CA86F315 7 AddSubscriberEngine 0x011a 0x100076c4 7 24 32 8 0x44 5 0x08 0x01 33 6c 00 00 00 00 07 00 18 00 20 00 08 00 44 05 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0048(in|base_type),stack=12,type=FC_LONG; p3:flags=0x0048(in|base_type),stack=16,type=FC_LONG; p4:flags=0x0070(out|return|base_type),stack=20,type=FC_LONG
|
|
3 INmxService 575008DB-845D-46C6-A906-F6F8CA86F315 8 RemoveSubscriberEngine 0x0150 0x100076fa 8 24 32 8 0x44 5 0x08 0x01 33 6c 00 00 00 00 08 00 18 00 20 00 08 00 44 05 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0048(in|base_type),stack=12,type=FC_LONG; p3:flags=0x0048(in|base_type),stack=16,type=FC_LONG; p4:flags=0x0070(out|return|base_type),stack=20,type=FC_LONG
|
|
3 INmxService 575008DB-845D-46C6-A906-F6F8CA86F315 9 SetHeartbeatSendInterval 0x0186 0x10007730 9 16 16 8 0x44 3 0x08 0x01 33 6c 00 00 00 00 09 00 10 00 10 00 08 00 44 03 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0070(out|return|base_type),stack=12,type=FC_LONG
|
|
4 INmxNotify 73849AEA-472A-4715-B8C6-1C806AF12DFC 3 ConnectionEstablished 0x021c 0x100077c6 3 24 32 8 0x44 5 0x08 0x01 33 6c 00 00 00 00 03 00 18 00 20 00 08 00 44 05 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0048(in|base_type),stack=12,type=FC_ENUM32; p3:flags=0x0048(in|base_type),stack=16,type=FC_LONG; p4:flags=0x0070(out|return|base_type),stack=20,type=FC_LONG
|
|
4 INmxNotify 73849AEA-472A-4715-B8C6-1C806AF12DFC 4 ConnectionClosed 0x0252 0x100077fc 4 16 16 8 0x44 3 0x08 0x01 33 6c 00 00 00 00 04 00 10 00 10 00 08 00 44 03 08 01 00 00 00 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x0048(in|base_type),stack=8,type=FC_LONG; p2:flags=0x0070(out|return|base_type),stack=12,type=FC_LONG
|
|
5 INmxSvcCallback B49F92F7-C748-4169-8ECA-A0670B012746 3 DataReceived 0x0000 0x100075aa 3 16 8 8 0x46 3 0x08 0x05 33 6c 00 00 00 00 03 00 10 00 08 00 08 00 46 03 08 05 00 00 01 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x010b(must_size|must_free|in|simple_ref),stack=8,type=type+0x0006 @0x10007908 [FC_CARRAY, 0x00, 0x01, 0x00, 0x28, 0x00, FC_USMALL, 0x00, 0x01, 0x00, FC_CHAR, FC_END, FC_UP, 0x00, FC_ENUM32, 0x00, FC_CARRAY, 0x01]; p2:flags=0x0070(out|return|base_type),stack=12,type=FC_LONG
|
|
5 INmxSvcCallback B49F92F7-C748-4169-8ECA-A0670B012746 4 StatusReceived 0x002a 0x100075d4 4 16 8 8 0x46 3 0x08 0x05 33 6c 00 00 00 00 04 00 10 00 08 00 08 00 46 03 08 05 00 00 01 00 00 00 p0:flags=0x0048(in|base_type),stack=4,type=FC_LONG; p1:flags=0x010b(must_size|must_free|in|simple_ref),stack=8,type=type+0x0006 @0x10007908 [FC_CARRAY, 0x00, 0x01, 0x00, 0x28, 0x00, FC_USMALL, 0x00, 0x01, 0x00, FC_CHAR, FC_END, FC_UP, 0x00, FC_ENUM32, 0x00, FC_CARRAY, 0x01]; p2:flags=0x0070(out|return|base_type),stack=12,type=FC_LONG
|