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>
7.7 KiB
7.7 KiB
LmxProxy.dll selected decompile
FUN_1001611f at 1001611f
Signature: undefined __thiscall FUN_1001611f(void * this, long param_1, long param_2, undefined4 param_3)
/* WARNING: Function: __EH_prolog3 replaced with injection: EH_prolog3 */
/* WARNING: Function: __EH_epilog3 replaced with injection: EH_epilog3 */
void __thiscall FUN_1001611f(void *this,long param_1,long param_2,undefined4 param_3)
{
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> bVar1;
undefined4 *puVar2;
int *piVar3;
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *pbVar4;
undefined4 *this_00;
long lVar5;
wchar_t *pwVar6;
long lVar7;
_func_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr
*p_Var8;
undefined4 *local_30;
undefined4 local_2c;
undefined4 local_28;
undefined4 local_24;
int *local_20;
int local_1c;
void *local_18;
int local_14;
undefined4 local_8;
undefined4 uStack_4;
uStack_4 = 0x20;
local_8 = 0x1001612b;
puVar2 = (undefined4 *)FUN_100170a4(0x34);
if (puVar2 == (undefined4 *)0x0) {
this_00 = (undefined4 *)0x0;
}
else {
this_00 = puVar2 + 1;
*puVar2 = 3;
_eh_vector_constructor_iterator_(this_00,0x10,3,FUN_10001517,FUN_10001f45);
}
local_1c = *(int *)((int)this + 8);
local_14 = 0;
if (0 < local_1c) {
local_18 = (void *)((int)this + 4);
do {
piVar3 = (int *)FUN_10007d02(local_18,local_14);
local_20 = piVar3;
if (piVar3 != (int *)0x0) {
(**(code **)(*piVar3 + 4))(piVar3);
}
local_8 = 1;
if (piVar3 != (int *)0x0) {
FUN_10015d08(this_00 + 8,param_1);
FUN_10015d08(this_00 + 4,param_2);
*(undefined2 *)this_00 = 0x6024;
this_00[2] = param_3;
local_2c = 0;
local_28 = 3;
local_24 = 0;
local_30 = this_00;
bVar1 = FUN_10003f01(*(basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> **)
(DAT_100294e0 + 0xc));
if (bVar1 != (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>)0x0) {
pwVar6 = L" Item Handle ";
lVar5 = param_1;
lVar7 = param_2;
p_Var8 = endl_exref;
pbVar4 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),
L"CProxy_ILMXProxyServerEvents::Fire_OnWriteComplete firing event - Server Handle "
);
pbVar4 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<
(pbVar4,lVar5);
pbVar4 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
FUN_10002dbf((int *)pbVar4,pwVar6);
pbVar4 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<
(pbVar4,lVar7);
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar4,p_Var8);
}
(**(code **)(*piVar3 + 0x18))(piVar3,2,&DAT_100201f8,0x400,1,&local_30,0,0,0);
}
local_8 = 0xffffffff;
if (piVar3 != (int *)0x0) {
(**(code **)(*piVar3 + 8))(piVar3);
}
local_14 = local_14 + 1;
} while (local_14 < local_1c);
}
if (this_00 != (undefined4 *)0x0) {
FUN_10015d66(this_00,3);
}
return;
}
FUN_10016271 at 10016271
Signature: undefined __thiscall FUN_10016271(void * this, long param_1, long param_2, undefined4 param_3)
/* WARNING: Function: __EH_prolog3 replaced with injection: EH_prolog3 */
/* WARNING: Function: __EH_epilog3 replaced with injection: EH_epilog3 */
void __thiscall FUN_10016271(void *this,long param_1,long param_2,undefined4 param_3)
{
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> bVar1;
undefined4 *puVar2;
int *piVar3;
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *pbVar4;
undefined4 *this_00;
long lVar5;
wchar_t *pwVar6;
long lVar7;
_func_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr
*p_Var8;
undefined4 *local_30;
undefined4 local_2c;
undefined4 local_28;
undefined4 local_24;
int *local_20;
int local_1c;
void *local_18;
int local_14;
undefined4 local_8;
undefined4 uStack_4;
uStack_4 = 0x20;
local_8 = 0x1001627d;
puVar2 = (undefined4 *)FUN_100170a4(0x34);
if (puVar2 == (undefined4 *)0x0) {
this_00 = (undefined4 *)0x0;
}
else {
this_00 = puVar2 + 1;
*puVar2 = 3;
_eh_vector_constructor_iterator_(this_00,0x10,3,FUN_10001517,FUN_10001f45);
}
local_1c = *(int *)((int)this + 8);
local_14 = 0;
if (0 < local_1c) {
local_18 = (void *)((int)this + 4);
do {
piVar3 = (int *)FUN_10007d02(local_18,local_14);
local_20 = piVar3;
if (piVar3 != (int *)0x0) {
(**(code **)(*piVar3 + 4))(piVar3);
}
local_8 = 1;
if (piVar3 != (int *)0x0) {
FUN_10015d08(this_00 + 8,param_1);
FUN_10015d08(this_00 + 4,param_2);
local_2c = 0;
local_24 = 0;
*(undefined2 *)this_00 = 0x6024;
this_00[2] = param_3;
local_28 = 3;
local_30 = this_00;
bVar1 = FUN_10003f01(*(basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> **)
(DAT_100294e0 + 0xc));
if (bVar1 != (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>)0x0) {
pwVar6 = L" Item Handle ";
lVar5 = param_1;
lVar7 = param_2;
p_Var8 = endl_exref;
pbVar4 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),
L"CProxy_ILMXProxyServerEvents::Fire_OperationComplete firing event - Server Handle "
);
pbVar4 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<
(pbVar4,lVar5);
pbVar4 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
FUN_10002dbf((int *)pbVar4,pwVar6);
pbVar4 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<
(pbVar4,lVar7);
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar4,p_Var8);
}
(**(code **)(*piVar3 + 0x18))(piVar3,3,&DAT_100201f8,0x400,1,&local_30,0,0,0);
}
local_8 = 0xffffffff;
if (piVar3 != (int *)0x0) {
(**(code **)(*piVar3 + 8))(piVar3);
}
local_14 = local_14 + 1;
} while (local_14 < local_1c);
}
if (this_00 != (undefined4 *)0x0) {
FUN_10015d66(this_00,3);
}
return;
}
Catch@10016cd3 at 10016cd3
Signature: undefined * __cdecl Catch@10016cd3(void)
undefined * __cdecl Catch_10016cd3(void)
{
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> bVar1;
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *this;
int unaff_EBP;
_func_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr
*p_Var2;
bVar1 = FUN_10003f01(*(basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> **)
(DAT_100294e0 + 4));
if (bVar1 != (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>)0x0) {
p_Var2 = endl_exref;
this = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
FUN_10002dbf(*(int **)(DAT_100294e0 + 4),
L"Fire_OnWriteComplete - threw an unknown exception");
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(this,p_Var2);
}
*(undefined4 *)(unaff_EBP + 8) = 0x80004005;
*(undefined4 *)(unaff_EBP + -4) = 0xffffffff;
return &DAT_10016d17;
}