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>
16 KiB
16 KiB
NmxSvcps.dll
Program
- Language:
x86:LE:32:default - Compiler spec:
windows - Image base:
10000000 - Executable format:
Portable Executable (PE)
Memory Blocks
| Name | Start | End | Size | R | W | X |
|---|---|---|---|---|---|---|
Headers |
10000000 |
100003ff |
1024 | Y | ||
.text |
10001000 |
100057ff |
18432 | Y | Y | |
.orpc |
10006000 |
100061ff |
512 | Y | Y | |
.rdata |
10007000 |
10009fff |
12288 | Y | ||
.data |
1000a000 |
1000b9bb |
6588 | Y | Y | |
.rsrc |
1000c000 |
1000c5ff |
1536 | Y | ||
.reloc |
1000d000 |
1000d9ff |
2560 | Y | ||
tdb |
ffdff000 |
ffdfffff |
4096 | Y | Y |
External Imports
KERNEL32.DLL::DecodePointerKERNEL32.DLL::DeleteCriticalSectionKERNEL32.DLL::DisableThreadLibraryCallsKERNEL32.DLL::EncodePointerKERNEL32.DLL::EnterCriticalSectionKERNEL32.DLL::ExitProcessKERNEL32.DLL::FreeEnvironmentStringsWKERNEL32.DLL::GetACPKERNEL32.DLL::GetCPInfoKERNEL32.DLL::GetCommandLineAKERNEL32.DLL::GetCurrentProcessKERNEL32.DLL::GetCurrentProcessIdKERNEL32.DLL::GetCurrentThreadIdKERNEL32.DLL::GetEnvironmentStringsWKERNEL32.DLL::GetFileTypeKERNEL32.DLL::GetLastErrorKERNEL32.DLL::GetModuleFileNameAKERNEL32.DLL::GetModuleFileNameWKERNEL32.DLL::GetModuleHandleWKERNEL32.DLL::GetOEMCPKERNEL32.DLL::GetProcAddressKERNEL32.DLL::GetStartupInfoWKERNEL32.DLL::GetStdHandleKERNEL32.DLL::GetStringTypeWKERNEL32.DLL::GetSystemTimeAsFileTimeKERNEL32.DLL::GetTickCountKERNEL32.DLL::HeapAllocKERNEL32.DLL::HeapCreateKERNEL32.DLL::HeapDestroyKERNEL32.DLL::HeapFreeKERNEL32.DLL::HeapReAllocKERNEL32.DLL::HeapSizeKERNEL32.DLL::InitializeCriticalSectionAndSpinCountKERNEL32.DLL::InterlockedDecrementKERNEL32.DLL::InterlockedIncrementKERNEL32.DLL::IsDebuggerPresentKERNEL32.DLL::IsProcessorFeaturePresentKERNEL32.DLL::IsValidCodePageKERNEL32.DLL::LCMapStringWKERNEL32.DLL::LeaveCriticalSectionKERNEL32.DLL::LoadLibraryWKERNEL32.DLL::MultiByteToWideCharKERNEL32.DLL::QueryPerformanceCounterKERNEL32.DLL::RtlUnwindKERNEL32.DLL::SetHandleCountKERNEL32.DLL::SetLastErrorKERNEL32.DLL::SetUnhandledExceptionFilterKERNEL32.DLL::SleepKERNEL32.DLL::TerminateProcessKERNEL32.DLL::TlsAllocKERNEL32.DLL::TlsFreeKERNEL32.DLL::TlsGetValueKERNEL32.DLL::TlsSetValueKERNEL32.DLL::UnhandledExceptionFilterKERNEL32.DLL::WideCharToMultiByteKERNEL32.DLL::WriteFileOLEAUT32.DLL::BSTR_UserFreeOLEAUT32.DLL::BSTR_UserMarshalOLEAUT32.DLL::BSTR_UserSizeOLEAUT32.DLL::BSTR_UserUnmarshalRPCRT4.DLL::CStdStubBuffer_AddRefRPCRT4.DLL::CStdStubBuffer_ConnectRPCRT4.DLL::CStdStubBuffer_CountRefsRPCRT4.DLL::CStdStubBuffer_DebugServerQueryInterfaceRPCRT4.DLL::CStdStubBuffer_DebugServerReleaseRPCRT4.DLL::CStdStubBuffer_DisconnectRPCRT4.DLL::CStdStubBuffer_InvokeRPCRT4.DLL::CStdStubBuffer_IsIIDSupportedRPCRT4.DLL::CStdStubBuffer_QueryInterfaceRPCRT4.DLL::IUnknown_AddRef_ProxyRPCRT4.DLL::IUnknown_QueryInterface_ProxyRPCRT4.DLL::IUnknown_Release_ProxyRPCRT4.DLL::NdrCStdStubBuffer_ReleaseRPCRT4.DLL::NdrDllCanUnloadNowRPCRT4.DLL::NdrDllGetClassObjectRPCRT4.DLL::NdrDllRegisterProxyRPCRT4.DLL::NdrDllUnregisterProxyRPCRT4.DLL::NdrOleAllocateRPCRT4.DLL::NdrOleFree
Exports and Globals
| Name | Address | Function |
|---|---|---|
Ordinal_2 |
10001000 |
DllGetClassObject |
DllGetClassObject |
10001000 |
DllGetClassObject |
Ordinal_1 |
10001040 |
DllCanUnloadNow |
DllCanUnloadNow |
10001040 |
DllCanUnloadNow |
Ordinal_3 |
100010a0 |
DllRegisterServer |
DllRegisterServer |
100010a0 |
DllRegisterServer |
Ordinal_4 |
100010e0 |
DllUnregisterServer |
DllUnregisterServer |
100010e0 |
DllUnregisterServer |
NdrCStdStubBuffer_Release |
1000111c |
NdrCStdStubBuffer_Release |
__CRT_INIT@12 |
1000118e |
__CRT_INIT@12 |
___DllMainCRTStartup |
100012f2 |
___DllMainCRTStartup |
entry |
100013e8 |
entry |
___set_flsgetvalue |
1000141d |
___set_flsgetvalue |
__mtterm |
10001451 |
__mtterm |
__initptd |
1000148e |
__initptd |
__getptd_noexit |
10001542 |
__getptd_noexit |
__getptd |
100015bb |
__getptd |
__freefls@4 |
100015d5 |
__freefls@4 |
__freeptd |
10001704 |
__freeptd |
__mtinit |
10001772 |
__mtinit |
_free |
100018ed |
_free |
__malloc_crt |
10001927 |
__malloc_crt |
__calloc_crt |
1000196c |
__calloc_crt |
__realloc_crt |
100019b8 |
__realloc_crt |
___crtCorExitProcess |
10001a06 |
___crtCorExitProcess |
___crtExitProcess |
10001a31 |
___crtExitProcess |
__init_pointers |
10001a5b |
__init_pointers |
__initterm_e |
10001a8e |
__initterm_e |
__cinit |
10001ab2 |
__cinit |
doexit |
10001b49 |
doexit |
_doexit |
10001b49 |
doexit |
__exit |
10001c89 |
__exit |
__cexit |
10001c9f |
__cexit |
__amsg_exit |
10001cae |
__amsg_exit |
__ioinit |
10001ccc |
__ioinit |
__ioterm |
10001f11 |
__ioterm |
__setenvp |
10001f64 |
__setenvp |
parse_cmdline |
10002040 |
parse_cmdline |
_parse_cmdline |
10002040 |
parse_cmdline |
__setargv |
100021da |
__setargv |
___crtGetEnvironmentStringsA |
10002295 |
___crtGetEnvironmentStringsA |
__RTC_Initialize |
1000232c |
__RTC_Initialize |
__heap_init |
10002378 |
__heap_init |
__heap_term |
10002396 |
__heap_term |
__SEH_prolog4 |
100023b0 |
__SEH_prolog4 |
__SEH_epilog4 |
100023f5 |
__SEH_epilog4 |
__except_handler4 |
10002410 |
__except_handler4 |
__XcptFilter |
1000259f |
__XcptFilter |
___CppXcptFilter |
100026e9 |
___CppXcptFilter |
___security_init_cookie |
10002709 |
___security_init_cookie |
__mtinitlocks |
100027a4 |
__mtinitlocks |
__mtdeletelocks |
100027ee |
__mtdeletelocks |
__mtinitlocknum |
1000285c |
__mtinitlocknum |
__lock |
1000291e |
__lock |
___addlocaleref |
10002951 |
___addlocaleref |
___removelocaleref |
100029e0 |
___removelocaleref |
___freetlocinfo |
10002a79 |
___freetlocinfo |
__updatetlocinfoEx_nolock |
10002bc4 |
__updatetlocinfoEx_nolock |
___updatetlocinfo |
10002c11 |
___updatetlocinfo |
CPtoLCID |
10002c8a |
CPtoLCID |
?CPtoLCID@@YAHH@Z |
10002c8a |
CPtoLCID |
setSBCS |
10002cb9 |
setSBCS |
?setSBCS@@YAXPAUthreadmbcinfostruct@@@Z |
10002cb9 |
setSBCS |
setSBUpLow |
10002d1d |
setSBUpLow |
?setSBUpLow@@YAXPAUthreadmbcinfostruct@@@Z |
10002d1d |
setSBUpLow |
___updatetmbcinfo |
10002ead |
___updatetmbcinfo |
??0_LocaleUpdate@@QAE@PAUlocaleinfo_struct@@@Z |
10002f51 |
_LocaleUpdate |
getSystemCP |
10002fd8 |
getSystemCP |
?getSystemCP@@YAHH@Z |
10002fd8 |
getSystemCP |
__setmbcp_nolock |
10003054 |
__setmbcp_nolock |
__setmbcp |
1000323d |
__setmbcp |
___initmbctable |
100033d7 |
___initmbctable |
__get_errno_from_oserr |
100033f5 |
__get_errno_from_oserr |
__errno |
10003437 |
__errno |
_malloc |
1000344a |
_malloc |
__calloc_impl |
100034de |
__calloc_impl |
_realloc |
10003560 |
_realloc |
__initp_misc_winsig |
10003657 |
__initp_misc_winsig |
siglookup |
10003675 |
siglookup |
_siglookup |
10003675 |
siglookup |
_raise |
100036b9 |
_raise |
__call_reportfault |
10003889 |
__call_reportfault |
__invoke_watson |
100039b2 |
__invoke_watson |
__invalid_parameter |
100039d7 |
__invalid_parameter |
__callnewh |
10003a23 |
__callnewh |
__onexit_nolock |
10003a4b |
__onexit_nolock |
__onexit |
10003b32 |
__onexit |
_atexit |
10003b6e |
_atexit |
__initp_misc_cfltcvt_tab |
10003b85 |
__initp_misc_cfltcvt_tab |
__ValidateImageBase |
10003bb0 |
__ValidateImageBase |
__FindPESection |
10003bf0 |
__FindPESection |
__IsNonwritableInCurrentImage |
10003c40 |
__IsNonwritableInCurrentImage |
__GET_RTERRMSG |
10003cfc |
__GET_RTERRMSG |
__NMSG_WRITE |
10003d22 |
__NMSG_WRITE |
__FF_MSGBANNER |
10003ed1 |
__FF_MSGBANNER |
_strcpy_s |
10003f0a |
_strcpy_s |
_strlen |
10003f70 |
_strlen |
x_ismbbtype_l |
10003ffb |
x_ismbbtype_l |
?x_ismbbtype_l@@YAHPAUlocaleinfo_struct@@IHH@Z |
10003ffb |
x_ismbbtype_l |
__ismbblead |
1000404e |
__ismbblead |
__security_check_cookie |
10004066 |
__security_check_cookie |
@__security_check_cookie@4 |
10004066 |
__security_check_cookie |
__local_unwind4 |
10004080 |
__local_unwind4 |
_EH4_CallFilterFunc |
10004172 |
_EH4_CallFilterFunc |
@_EH4_CallFilterFunc@8 |
10004172 |
_EH4_CallFilterFunc |
_EH4_TransferToHandler |
10004189 |
_EH4_TransferToHandler |
@_EH4_TransferToHandler@8 |
10004189 |
_EH4_TransferToHandler |
_EH4_GlobalUnwind2 |
100041a2 |
_EH4_GlobalUnwind2 |
@_EH4_GlobalUnwind2@8 |
100041a2 |
_EH4_GlobalUnwind2 |
_EH4_LocalUnwind |
100041bb |
_EH4_LocalUnwind |
@_EH4_LocalUnwind@16 |
100041bb |
_EH4_LocalUnwind |
___free_lc_time |
100041d2 |
___free_lc_time |
___free_lconv_num |
10004549 |
___free_lconv_num |
___free_lconv_mon |
100045b2 |
___free_lconv_mon |
_memset |
100046b0 |
_memset |
__freea |
1000472a |
__freea |
__crtLCMapStringA_stat |
1000474a |
__crtLCMapStringA_stat |
?__crtLCMapStringA_stat@@YAHPAUlocaleinfo_struct@@KKPBDHPADHHH@Z |
1000474a |
__crtLCMapStringA_stat |
___crtLCMapStringA |
10004931 |
___crtLCMapStringA |
__crtGetStringTypeA_stat |
10004977 |
__crtGetStringTypeA_stat |
?__crtGetStringTypeA_stat@@YAHPAUlocaleinfo_struct@@KPBDHPAGHHH@Z |
10004977 |
__crtGetStringTypeA_stat |
___crtGetStringTypeA |
10004a5e |
___crtGetStringTypeA |
__msize |
10004a9e |
__msize |
_abort |
10004ad1 |
_abort |
FID_conflict:_memcpy |
10004b10 |
FID_conflict:_memcpy |
_memmove |
10004b10 |
FID_conflict:_memcpy |
_memcpy |
10004b10 |
FID_conflict:_memcpy |
___crtMessageBoxW |
10004e82 |
___crtMessageBoxW |
_wcscat_s |
10004fee |
_wcscat_s |
_wcsncpy_s |
10005063 |
_wcsncpy_s |
_wcslen |
10005130 |
_wcslen |
_wcscpy_s |
1000514b |
_wcscpy_s |
__set_error_mode |
100051ae |
__set_error_mode |
___report_gsfailure |
100051ed |
___report_gsfailure |
__global_unwind2 |
10005300 |
__global_unwind2 |
__local_unwind2 |
10005365 |
__local_unwind2 |
__NLG_Notify |
10005415 |
__NLG_Notify |
__VEC_memzero |
10005437 |
__VEC_memzero |
__alloca_probe_16 |
10005510 |
__alloca_probe_16 |
__alloca_probe_8 |
10005526 |
__alloca_probe_8 |
__alloca_probe |
10005640 |
__alloca_probe |
__chkstk |
10005640 |
__alloca_probe |
RtlUnwind |
1000566c |
RtlUnwind |
Rsrc_Version_1_409 |
1000c0a0 |
`` |
Rsrc_Manifest_2_409 |
1000c46c |
`` |
ExceptionList |
ffdff000 |
`` |
StackBase |
ffdff004 |
`` |
StackLimit |
ffdff008 |
`` |
SubSystemTib |
ffdff00c |
`` |
FiberData |
ffdff010 |
`` |
ArbitraryUserPointer |
ffdff014 |
`` |
Self |
ffdff018 |
`` |
EnvironmentPointer |
ffdff01c |
`` |
ClientId |
ffdff020 |
`` |
ActiveRpcHandle |
ffdff028 |
`` |
ThreadLocalStoragePointer |
ffdff02c |
`` |
ProcessEnvironmentBlock |
ffdff030 |
`` |
LastErrorValue |
ffdff034 |
`` |
CountOfOwnedCriticalSections |
ffdff038 |
`` |
CsrClientThread |
ffdff03c |
`` |
Win32ThreadInfo |
ffdff040 |
`` |
User32Reserved |
ffdff044 |
`` |
UserReserved |
ffdff0ac |
`` |
WOW32Reserved |
ffdff0c0 |
`` |
CurrentLocale |
ffdff0c4 |
`` |
FpSoftwareStatusRegister |
ffdff0c8 |
`` |
SystemReserved1 |
ffdff0cc |
`` |
ExceptionCode |
ffdff1a4 |
`` |
ActivationContextStackPointer |
ffdff1a8 |
`` |
SpareBytes |
ffdff1ac |
`` |
TxFsContext |
ffdff1d0 |
`` |
GdiTebBatch |
ffdff1d4 |
`` |
RealClientId |
ffdff6b4 |
`` |
GdiCachedProcessHandle |
ffdff6bc |
`` |
GdiClientPID |
ffdff6c0 |
`` |
GdiCLientTID |
ffdff6c4 |
`` |
GdiThreadLocalInfo |
ffdff6c8 |
`` |
Win32ClientInfo |
ffdff6cc |
`` |
glDispatchTable |
ffdff7c4 |
`` |
glReserved1 |
ffdffb68 |
`` |
glReserved2 |
ffdffbdc |
`` |
glSectionInfo |
ffdffbe0 |
`` |
glSection |
ffdffbe4 |
`` |
glTable |
ffdffbe8 |
`` |
glCurrentRC |
ffdffbec |
`` |
glContext |
ffdffbf0 |
`` |
LastStatusValue |
ffdffbf4 |
`` |
StaticUnicodeBuffer |
ffdffc00 |
`` |
DeallocationStack |
ffdffe0c |
`` |
TlsSlots |
ffdffe10 |
`` |
TlsLinks.Flink |
ffdfff10 |
`` |
TlsLinks.Blink |
ffdfff14 |
`` |
Vdm |
ffdfff18 |
`` |
ReservedForNtRpc |
ffdfff1c |
`` |
DbgSsReserved |
ffdfff20 |
`` |
HardErrorMode |
ffdfff28 |
`` |
Instrumentation |
ffdfff2c |
`` |
ActivityId |
ffdfff50 |
`` |
SubProcessTag |
ffdfff60 |
`` |
EtwLocalData |
ffdfff64 |
`` |
EtwTraceData |
ffdfff68 |
`` |
WinSockData |
ffdfff6c |
`` |
GdiBatchCount |
ffdfff70 |
`` |
IdealProcessorValue |
ffdfff74 |
`` |
GuaranteedStackBytes |
ffdfff78 |
`` |
ReservedForPerf |
ffdfff7c |
`` |
ReservedForOle |
ffdfff80 |
`` |
WaitingOnLoaderLock |
ffdfff84 |
`` |
SavedPriorityState |
ffdfff88 |
`` |
SoftPatchPtr1 |
ffdfff8c |
`` |
ThreadPoolData |
ffdfff90 |
`` |
TlsExpansionSlots |
ffdfff94 |
`` |
MuiGeneration |
ffdfff98 |
`` |
IsImpersonating |
ffdfff9c |
`` |
NlsCache |
ffdfffa0 |
`` |
pShimData |
ffdfffa4 |
`` |
HeapVirtualAffinity |
ffdfffa8 |
`` |
CurrentTransactionHandle |
ffdfffac |
`` |
ActiveFrame |
ffdfffb0 |
`` |
FlsData |
ffdfffb4 |
`` |
PreferredLanguages |
ffdfffb8 |
`` |
UserPrefLanguages |
ffdfffbc |
`` |
MergedPrefLanguages |
ffdfffc0 |
`` |
MuiImpersonation |
ffdfffc4 |
`` |
CrossTebFlags |
ffdfffc8 |
`` |
SameTebFlags |
ffdfffca |
`` |
TxnScopeEnterCallback |
ffdfffcc |
`` |
TxnScopeExitCallback |
ffdfffd0 |
`` |
TxnScopeContext |
ffdfffd4 |
`` |
LockCount |
ffdfffd8 |
`` |
ResourceRetValue |
ffdfffe0 |
`` |
Interesting Strings and Referencing Functions
| Address | String | Referencing Functions |
|---|---|---|
10007538 |
INmxSvcCallback |
`` |
10007548 |
INmxNotify |
`` |
10007554 |
INmxService |
`` |
10007560 |
INmxStatus |
`` |
1000756c |
INmxSvcStatistics |
`` |
10007580 |
INmxService2 |
`` |
100097f6 |
NdrDllGetClassObject |
`` |
1000980e |
NdrDllCanUnloadNow |
`` |
10009824 |
NdrCStdStubBuffer_Release |
`` |
10009840 |
NdrDllRegisterProxy |
`` |
10009856 |
NdrDllUnregisterProxy |
`` |
100099d2 |
NdrOleFree |
`` |
100099e0 |
NdrOleAllocate |
`` |
100099f0 |
RPCRT4.dll |
`` |
10009e80 |
NmxSvcPS.dll |
`` |
1000c1d0 |
NmxSvc_v0032 |
`` |
1000c214 |
NmxSvcps Module |
`` |
1000c40c |
NmxSvcps.dll |
`` |
Interesting API Callers
| Caller | Entry | Call Targets |
|---|---|---|
DllGetClassObject |
10001000 |
NdrDllGetClassObject |
DllCanUnloadNow |
10001040 |
NdrDllCanUnloadNow |
FUN_10001050 |
10001050 |
NdrCStdStubBuffer_Release |
DllRegisterServer |
100010a0 |
NdrDllRegisterProxy |
DllUnregisterServer |
100010e0 |
NdrDllUnregisterProxy |
setSBCS |
10002cb9 |
_memset |
setSBUpLow |
10002d1d |
_memset |
__setmbcp_nolock |
10003054 |
_memset |
__call_reportfault |
10003889 |
_memset |
__crtGetStringTypeA_stat |
10004977 |
_memset |