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>
732 lines
25 KiB
Markdown
732 lines
25 KiB
Markdown
# LmxProxy.dll selected decompile
|
|
|
|
## FUN_1001244d at 1001244d
|
|
|
|
Signature: `undefined __stdcall FUN_1001244d(int param_1, int param_2, int param_3)`
|
|
|
|
```c
|
|
|
|
/* WARNING: Function: __EH_prolog3_catch replaced with injection: EH_prolog3 */
|
|
|
|
void FUN_1001244d(int param_1,int param_2,int param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> bVar2;
|
|
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *pbVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
wchar_t *pwVar6;
|
|
_func_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr
|
|
*p_Var7;
|
|
_func_void_uint__EXCEPTION_POINTERS_ptr *local_20 [2];
|
|
int *local_18 [4];
|
|
uint local_8;
|
|
undefined4 uStack_4;
|
|
|
|
uStack_4 = 0x34;
|
|
local_8 = 0;
|
|
FUN_10011b07(local_20);
|
|
local_8 = CONCAT31(local_8._1_3_,1);
|
|
local_18[0] = (int *)0x0;
|
|
bVar2 = FUN_10003f01(*(basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> **)
|
|
(DAT_100294e0 + 0xc));
|
|
if (bVar2 != (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>)0x0) {
|
|
pwVar6 = L" Item Handle ";
|
|
iVar5 = param_2;
|
|
iVar4 = param_3;
|
|
p_Var7 = endl_exref;
|
|
pbVar3 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),
|
|
L"CLMXProxyServer::RemoveItem - Server Handle ");
|
|
pbVar3 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar3,iVar5)
|
|
;
|
|
pbVar3 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf((int *)pbVar3,pwVar6);
|
|
pbVar3 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar3,iVar4)
|
|
;
|
|
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar3,p_Var7);
|
|
}
|
|
iVar4 = FUN_1000fa3b((void *)(param_1 + -8),param_2,param_3,¶m_3,(int *)local_18);
|
|
piVar1 = local_18[0];
|
|
iVar5 = param_3;
|
|
if (-1 < iVar4) {
|
|
FUN_1000d5d5(local_18[0] + 4,param_3);
|
|
FUN_10010202((void *)(iVar5 + 0x2c),¶m_3,piVar1);
|
|
iVar4 = 0;
|
|
}
|
|
bVar2 = FUN_10003f01(*(basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> **)
|
|
(DAT_100294e0 + 0xc));
|
|
if (bVar2 != (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>)0x0) {
|
|
p_Var7 = endl_exref;
|
|
pbVar3 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),
|
|
L"CLMXProxyServer::RemoveItem - returning HRESULT ");
|
|
pbVar3 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar3,iVar4)
|
|
;
|
|
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar3,p_Var7);
|
|
}
|
|
local_8 = local_8 & 0xffffff00;
|
|
_set_se_translator(local_20[0]);
|
|
FUN_100125b4();
|
|
return;
|
|
}
|
|
|
|
|
|
```
|
|
|
|
## FUN_10013d9c at 10013d9c
|
|
|
|
Signature: `undefined __stdcall FUN_10013d9c(int param_1, int param_2, int * param_3, undefined4 param_4)`
|
|
|
|
```c
|
|
|
|
/* WARNING: Function: __EH_prolog3_catch replaced with injection: EH_prolog3 */
|
|
|
|
void FUN_10013d9c(int param_1,int param_2,int *param_3,undefined4 param_4)
|
|
|
|
{
|
|
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> bVar1;
|
|
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *pbVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
wchar_t *pwVar5;
|
|
_func_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr
|
|
*p_Var6;
|
|
_func_void_uint__EXCEPTION_POINTERS_ptr *local_24 [2];
|
|
int local_1c;
|
|
int local_18;
|
|
uint local_8;
|
|
undefined4 uStack_4;
|
|
|
|
uStack_4 = 0x38;
|
|
local_8 = 0;
|
|
FUN_10011b07(local_24);
|
|
local_8 = CONCAT31(local_8._1_3_,1);
|
|
local_18 = 0;
|
|
local_1c = 0;
|
|
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) {
|
|
pwVar5 = L" Item Handle ";
|
|
iVar4 = param_2;
|
|
piVar3 = param_3;
|
|
p_Var6 = endl_exref;
|
|
pbVar2 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),L"CLMXProxyServer::Suspend - Server Handle "
|
|
);
|
|
pbVar2 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar2,iVar4)
|
|
;
|
|
pbVar2 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf((int *)pbVar2,pwVar5);
|
|
pbVar2 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<
|
|
(pbVar2,(long)piVar3);
|
|
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar2,p_Var6);
|
|
}
|
|
local_18 = FUN_1000fb02((void *)(param_1 + -8),param_2,(int)param_3,(int *)¶m_3,&local_1c);
|
|
if (-1 < local_18) {
|
|
FUN_1000de6d(¶m_3,(undefined4 *)param_3[5]);
|
|
local_8 = CONCAT31(local_8._1_3_,2);
|
|
if (param_3 == (int *)0x0) {
|
|
pwVar5 = L"CLMXProxyServer::Suspend - Query for IMxScanOnDemand failed";
|
|
piVar3 = (int *)FUN_10003248();
|
|
FUN_1000308b(piVar3,pwVar5);
|
|
}
|
|
else {
|
|
local_18 = (**(code **)(*param_3 + 0xc))
|
|
(param_3,*(undefined4 *)(local_1c + 8),*(undefined4 *)(local_1c + 0x14),
|
|
param_4);
|
|
}
|
|
local_8 = CONCAT31((int3)(local_8 >> 8),1);
|
|
if (param_3 != (int *)0x0) {
|
|
(**(code **)(*param_3 + 8))(param_3);
|
|
}
|
|
}
|
|
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) {
|
|
iVar4 = local_18;
|
|
p_Var6 = endl_exref;
|
|
pbVar2 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),
|
|
L"CLMXProxyServer::Suspend - returning HRESULT ");
|
|
pbVar2 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar2,iVar4)
|
|
;
|
|
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar2,p_Var6);
|
|
}
|
|
local_8 = local_8 & 0xffffff00;
|
|
_set_se_translator(local_24[0]);
|
|
FUN_10013f49();
|
|
return;
|
|
}
|
|
|
|
|
|
```
|
|
|
|
## FUN_10014028 at 10014028
|
|
|
|
Signature: `undefined __stdcall FUN_10014028(int param_1, int param_2, int * param_3, undefined4 param_4)`
|
|
|
|
```c
|
|
|
|
/* WARNING: Function: __EH_prolog3_catch replaced with injection: EH_prolog3 */
|
|
|
|
void FUN_10014028(int param_1,int param_2,int *param_3,undefined4 param_4)
|
|
|
|
{
|
|
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> bVar1;
|
|
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *pbVar2;
|
|
int *piVar3;
|
|
int iVar4;
|
|
wchar_t *pwVar5;
|
|
_func_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr
|
|
*p_Var6;
|
|
_func_void_uint__EXCEPTION_POINTERS_ptr *local_24 [2];
|
|
int local_1c;
|
|
int local_18;
|
|
uint local_8;
|
|
undefined4 uStack_4;
|
|
|
|
uStack_4 = 0x38;
|
|
local_8 = 0;
|
|
FUN_10011b07(local_24);
|
|
local_8 = CONCAT31(local_8._1_3_,1);
|
|
local_18 = 0;
|
|
local_1c = 0;
|
|
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) {
|
|
pwVar5 = L" Item Handle ";
|
|
iVar4 = param_2;
|
|
piVar3 = param_3;
|
|
p_Var6 = endl_exref;
|
|
pbVar2 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),
|
|
L"CLMXProxyServer::Activate - Server Handle ");
|
|
pbVar2 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar2,iVar4)
|
|
;
|
|
pbVar2 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf((int *)pbVar2,pwVar5);
|
|
pbVar2 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<
|
|
(pbVar2,(long)piVar3);
|
|
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar2,p_Var6);
|
|
}
|
|
local_18 = FUN_1000fb02((void *)(param_1 + -8),param_2,(int)param_3,(int *)¶m_3,&local_1c);
|
|
if (-1 < local_18) {
|
|
FUN_1000de6d(¶m_3,(undefined4 *)param_3[5]);
|
|
local_8 = CONCAT31(local_8._1_3_,2);
|
|
if (param_3 == (int *)0x0) {
|
|
pwVar5 = L"CLMXProxyServer::Activate - Query for IMxScanOnDemand failed";
|
|
piVar3 = (int *)FUN_10003248();
|
|
FUN_1000308b(piVar3,pwVar5);
|
|
}
|
|
else {
|
|
local_18 = (**(code **)(*param_3 + 0x10))
|
|
(param_3,*(undefined4 *)(local_1c + 8),*(undefined4 *)(local_1c + 0x14),
|
|
param_4);
|
|
}
|
|
local_8 = CONCAT31((int3)(local_8 >> 8),1);
|
|
if (param_3 != (int *)0x0) {
|
|
(**(code **)(*param_3 + 8))(param_3);
|
|
}
|
|
}
|
|
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) {
|
|
iVar4 = local_18;
|
|
p_Var6 = endl_exref;
|
|
pbVar2 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),
|
|
L"CLMXProxyServer::Activate - returning HRESULT ");
|
|
pbVar2 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar2,iVar4)
|
|
;
|
|
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar2,p_Var6);
|
|
}
|
|
local_8 = local_8 & 0xffffff00;
|
|
_set_se_translator(local_24[0]);
|
|
FUN_100141d5();
|
|
return;
|
|
}
|
|
|
|
|
|
```
|
|
|
|
## FUN_10011f9e at 10011f9e
|
|
|
|
Signature: `undefined __stdcall FUN_10011f9e(int * param_1, int * param_2, OLECHAR * param_3, undefined4 param_4, int * param_5)`
|
|
|
|
```c
|
|
|
|
/* WARNING: Function: __EH_prolog3_catch replaced with injection: EH_prolog3 */
|
|
|
|
void FUN_10011f9e(int *param_1,int *param_2,OLECHAR *param_3,undefined4 param_4,int *param_5)
|
|
|
|
{
|
|
char cVar1;
|
|
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> bVar2;
|
|
undefined1 uVar3;
|
|
undefined *puVar4;
|
|
int iVar5;
|
|
int *piVar6;
|
|
basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *pbVar7;
|
|
CComBSTR *pCVar8;
|
|
undefined4 *puVar9;
|
|
int *piVar10;
|
|
HRESULT HVar11;
|
|
uint uVar12;
|
|
OLECHAR *pOVar13;
|
|
undefined4 uVar14;
|
|
wchar_t *pwVar15;
|
|
_func_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr_basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>_ptr
|
|
*p_Var16;
|
|
undefined1 local_70 [4];
|
|
undefined4 local_6c [7];
|
|
undefined4 local_50 [7];
|
|
undefined4 local_34 [5];
|
|
undefined4 local_20;
|
|
HRESULT local_1c;
|
|
_func_void_uint__EXCEPTION_POINTERS_ptr *local_18 [4];
|
|
uint local_8;
|
|
undefined4 uStack_4;
|
|
|
|
uStack_4 = 0x60;
|
|
local_8 = 0;
|
|
FUN_10011b07(local_18);
|
|
piVar10 = param_1;
|
|
local_8 = CONCAT31(local_8._1_3_,1);
|
|
cVar1 = FUN_1000d2d6((int)(param_1 + -2));
|
|
if (cVar1 == '\0') {
|
|
uVar14 = 0;
|
|
uVar12 = 1;
|
|
puVar4 = FUN_10003248();
|
|
iVar5 = FUN_10003897(puVar4,uVar12);
|
|
puVar4 = FUN_10003248();
|
|
uVar12 = FUN_1000305b(puVar4,iVar5,uVar14);
|
|
if ((char)uVar12 != '\0') {
|
|
pwVar15 =
|
|
L"Failed to retrieve information from the MXAccess_Runtime license. Either MXAccess_Runtime license is not available or expired."
|
|
;
|
|
piVar6 = (int *)FUN_10003248();
|
|
FUN_100030ef(piVar6,pwVar15);
|
|
}
|
|
bVar2 = FUN_10003f01(*(basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> **)
|
|
(DAT_100294e0 + 0xc));
|
|
if (bVar2 != (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>)0x0) {
|
|
pwVar15 = L" No Valid License found - returning E_ACCESSDENIED HRESULT";
|
|
p_Var16 = endl_exref;
|
|
uVar3 = FUN_1000d2d6((int)(piVar10 + -2));
|
|
pbVar7 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),
|
|
L"CLMXProxyServer::AddItem2 - Valid License: ");
|
|
pbVar7 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<
|
|
(pbVar7,(bool)uVar3);
|
|
pbVar7 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf((int *)pbVar7,pwVar15);
|
|
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar7,p_Var16);
|
|
}
|
|
local_8 = local_8 & 0xffffff00;
|
|
_set_se_translator(local_18[0]);
|
|
FUN_1001236d();
|
|
return;
|
|
}
|
|
bVar2 = FUN_10003f01(*(basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> **)
|
|
(DAT_100294e0 + 0xc));
|
|
if (param_3 == (OLECHAR *)0x0) {
|
|
if (bVar2 != (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>)0x0) {
|
|
pwVar15 = L" Item name NULL - returning E_INVALIDARG HRESULT";
|
|
piVar10 = param_2;
|
|
p_Var16 = endl_exref;
|
|
pbVar7 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),
|
|
L"CLMXProxyServer::AddItem2 - Server Handle: ");
|
|
pbVar7 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<
|
|
(pbVar7,(long)piVar10);
|
|
pbVar7 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf((int *)pbVar7,pwVar15);
|
|
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar7,p_Var16);
|
|
}
|
|
local_8 = local_8 & 0xffffff00;
|
|
_set_se_translator(local_18[0]);
|
|
FUN_1001236d();
|
|
return;
|
|
}
|
|
if (param_5 == (int *)0x0) {
|
|
if (bVar2 != (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>)0x0) {
|
|
pwVar15 = L" Item handle is NULL - returning E_POINTER HRESULT";
|
|
piVar10 = param_2;
|
|
p_Var16 = endl_exref;
|
|
pbVar7 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),
|
|
L"CLMXProxyServer::AddItem2 - Server Handle: ");
|
|
pbVar7 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<
|
|
(pbVar7,(long)piVar10);
|
|
pbVar7 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf((int *)pbVar7,pwVar15);
|
|
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar7,p_Var16);
|
|
}
|
|
local_8 = local_8 & 0xffffff00;
|
|
_set_se_translator(local_18[0]);
|
|
FUN_1001236d();
|
|
return;
|
|
}
|
|
if (bVar2 != (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>)0x0) {
|
|
pwVar15 = L" Item name: ";
|
|
piVar6 = param_2;
|
|
pOVar13 = param_3;
|
|
p_Var16 = endl_exref;
|
|
pbVar7 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),
|
|
L"CLMXProxyServer::AddItem2 - Server Handle: ");
|
|
pbVar7 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<
|
|
(pbVar7,(long)piVar6);
|
|
piVar6 = (int *)FUN_10002dbf((int *)pbVar7,pwVar15);
|
|
pbVar7 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf(piVar6,pOVar13);
|
|
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar7,p_Var16);
|
|
}
|
|
local_20 = 0;
|
|
piVar6 = (int *)FUN_1000f663(piVar10 + 9,¶m_1,(int *)¶m_2);
|
|
iVar5 = *piVar6;
|
|
if (iVar5 == piVar10[10]) {
|
|
local_1c = -0x7ff8ffa9;
|
|
}
|
|
else {
|
|
param_2 = (int *)0x0;
|
|
local_8._1_3_ = (undefined3)(local_8 >> 8);
|
|
local_8._0_1_ = 3;
|
|
local_1c = CoCreateInstance((IID *)&DAT_1001e860,(LPUNKNOWN)0x0,0x17,(IID *)&DAT_1001cf8c,
|
|
¶m_2);
|
|
if (-1 < local_1c) {
|
|
FUN_1000ddf7(¶m_1,param_2);
|
|
local_8._0_1_ = 4;
|
|
(**(code **)(*param_2 + 0x24))(param_2,param_3);
|
|
(**(code **)(*param_2 + 0x44))(param_2,param_4);
|
|
local_1c = (**(code **)(**(int **)(iVar5 + 0x28) + 0x14))
|
|
(*(int **)(iVar5 + 0x28),param_2,&local_20);
|
|
if (local_1c == 0) {
|
|
piVar10 = (int *)(iVar5 + 0x14);
|
|
*piVar10 = *piVar10 + 1;
|
|
*param_5 = *piVar10;
|
|
pCVar8 = FUN_1000dcbb(local_50,param_3,local_20);
|
|
local_8._0_1_ = 5;
|
|
puVar9 = FUN_1000f743(local_70,piVar10,pCVar8);
|
|
local_8._0_1_ = 6;
|
|
cVar1 = '\0';
|
|
piVar10 = (int *)FUN_1000ffa9((void *)(iVar5 + 0x3c),puVar9);
|
|
FUN_100104d1((void *)(iVar5 + 0x3c),local_34,piVar10,cVar1);
|
|
local_8._0_1_ = 5;
|
|
FUN_1000d2ee(local_6c);
|
|
local_8._0_1_ = 4;
|
|
FUN_1000d2ee(local_50);
|
|
}
|
|
local_8._0_1_ = 3;
|
|
if (param_1 != (int *)0x0) {
|
|
(**(code **)(*param_1 + 8))(param_1);
|
|
}
|
|
}
|
|
local_8 = CONCAT31(local_8._1_3_,1);
|
|
if (param_2 != (int *)0x0) {
|
|
(**(code **)(*param_2 + 8))(param_2);
|
|
}
|
|
}
|
|
bVar2 = FUN_10003f01(*(basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> **)
|
|
(DAT_100294e0 + 0xc));
|
|
if (bVar2 != (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>)0x0) {
|
|
iVar5 = *param_5;
|
|
pwVar15 = L" Item Handle: ";
|
|
HVar11 = local_1c;
|
|
p_Var16 = endl_exref;
|
|
pbVar7 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf(*(int **)(DAT_100294e0 + 0xc),
|
|
L"CLMXProxyServer::AddItem2 - returning HRESULT ");
|
|
pbVar7 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<
|
|
(pbVar7,HVar11);
|
|
pbVar7 = (basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_> *)
|
|
FUN_10002dbf((int *)pbVar7,pwVar15);
|
|
pbVar7 = std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar7,iVar5)
|
|
;
|
|
std::basic_ostream<wchar_t,struct_std::char_traits<wchar_t>_>::operator<<(pbVar7,p_Var16);
|
|
}
|
|
local_8 = local_8 & 0xffffff00;
|
|
_set_se_translator(local_18[0]);
|
|
FUN_1001236d();
|
|
return;
|
|
}
|
|
|
|
|
|
```
|
|
|
|
## FUN_1001150e at 1001150e
|
|
|
|
Signature: `undefined __thiscall FUN_1001150e(void * this, undefined4 param_1, int * param_2, undefined1 * param_3)`
|
|
|
|
```c
|
|
|
|
/* WARNING: Function: __EH_prolog3_GS replaced with injection: EH_prolog3 */
|
|
/* WARNING: Removing unreachable block (ram,0x100117e5) */
|
|
/* WARNING: Removing unreachable block (ram,0x10011809) */
|
|
|
|
void __thiscall FUN_1001150e(void *this,undefined4 param_1,int *param_2,undefined1 *param_3)
|
|
|
|
{
|
|
bool bVar1;
|
|
undefined *puVar2;
|
|
int iVar3;
|
|
int *piVar4;
|
|
HRESULT HVar5;
|
|
size_t sVar6;
|
|
BSTR *ppOVar7;
|
|
code *pcVar8;
|
|
undefined1 auStack_4c8 [20];
|
|
undefined4 uStack_4b4;
|
|
uint uVar9;
|
|
wchar_t *pwVar10;
|
|
undefined4 uVar11;
|
|
BSTR local_474;
|
|
undefined1 *local_470;
|
|
int *local_46c;
|
|
undefined4 local_468;
|
|
HMODULE local_464;
|
|
FARPROC local_460;
|
|
HANDLE local_45c;
|
|
int local_458;
|
|
BSTR local_454;
|
|
uint local_450;
|
|
LPCWSTR local_44c;
|
|
BSTR local_448;
|
|
undefined4 local_444 [7];
|
|
WCHAR local_428 [528];
|
|
int local_8;
|
|
undefined4 uStack_4;
|
|
|
|
uStack_4 = 0x470;
|
|
local_8 = 0x1001151d;
|
|
local_468 = param_1;
|
|
local_46c = param_2;
|
|
local_450 = 0;
|
|
*param_3 = 0;
|
|
local_470 = param_3;
|
|
bVar1 = FUN_1000dbd4(*(LPCWSTR *)this);
|
|
if (!bVar1) {
|
|
uVar11 = 0;
|
|
uVar9 = 1;
|
|
puVar2 = FUN_10003248();
|
|
iVar3 = FUN_10003897(puVar2,uVar9);
|
|
puVar2 = FUN_10003248();
|
|
uVar9 = FUN_1000305b(puVar2,iVar3,uVar11);
|
|
if ((char)uVar9 != '\0') {
|
|
pwVar10 = L"Can not create dump under MinidumpDirectory %s.";
|
|
piVar4 = (int *)FUN_10003248();
|
|
FUN_100030ef(piVar4,pwVar10);
|
|
}
|
|
goto LAB_10011990;
|
|
}
|
|
local_458 = 0;
|
|
local_8._0_1_ = 0;
|
|
local_8._1_3_ = 0;
|
|
memset(local_428,0,0x412);
|
|
GetModuleFileNameW((HMODULE)0x0,local_428,0x208);
|
|
pwVar10 = wcsrchr(local_428,L'\\');
|
|
if (pwVar10 + 1 == (OLECHAR *)0x0) {
|
|
local_448 = (BSTR)0x0;
|
|
LAB_100115d9:
|
|
local_8._0_1_ = 1;
|
|
ATL::CComBSTR::CComBSTR((CComBSTR *)&local_44c,this);
|
|
local_8._0_1_ = 2;
|
|
FUN_1000dd27(&local_44c,L"\\");
|
|
HVar5 = FUN_1000ca95(&local_44c,local_448);
|
|
if (HVar5 < 0) goto LAB_1001162b;
|
|
FUN_1000dd27(&local_44c,L"*.dmp");
|
|
local_45c = (HANDLE)FUN_1000d165(local_44c);
|
|
local_454 = (BSTR)FUN_1000e389();
|
|
if ((int)local_45c < (int)local_454) {
|
|
LAB_10011719:
|
|
local_454 = (BSTR)0x0;
|
|
local_464 = FUN_1000d084(5,L"dbghelp.dll",'\0',(DWORD *)&local_454);
|
|
if (local_464 == (HMODULE)0x0) {
|
|
uVar11 = 0;
|
|
uVar9 = 1;
|
|
puVar2 = FUN_10003248();
|
|
iVar3 = FUN_10003897(puVar2,uVar9);
|
|
puVar2 = FUN_10003248();
|
|
uVar9 = FUN_1000305b(puVar2,iVar3,uVar11);
|
|
pcVar8 = SysFreeString_exref;
|
|
if ((char)uVar9 != '\0') {
|
|
pwVar10 = L"Failed to load dbghelp.dll to generate minidump. Error code : %d";
|
|
piVar4 = (int *)FUN_10003248();
|
|
FUN_100030ef(piVar4,pwVar10);
|
|
pcVar8 = SysFreeString_exref;
|
|
}
|
|
}
|
|
else {
|
|
local_460 = GetProcAddress(local_464,"MiniDumpWriteDump");
|
|
FUN_1000e3b2(this,local_448,&local_458);
|
|
if (local_458 == 0) {
|
|
local_454 = SysAllocString(L"");
|
|
if (local_454 == (BSTR)0x0) goto LAB_10011626;
|
|
ppOVar7 = &local_454;
|
|
local_8 = 7;
|
|
local_450 = 2;
|
|
}
|
|
else {
|
|
ppOVar7 = (BSTR *)ATL::CComBSTR::CComBSTR((CComBSTR *)&local_474,(CComBSTR *)&local_458);
|
|
local_8 = CONCAT31(local_8._1_3_,6);
|
|
local_450 = 1;
|
|
}
|
|
local_45c = CreateFileW(*ppOVar7,0xc0000000,0,(LPSECURITY_ATTRIBUTES)0x0,2,0x80,(HANDLE)0x0)
|
|
;
|
|
pcVar8 = SysFreeString_exref;
|
|
local_8 = 6;
|
|
if ((local_450 & 2) != 0) {
|
|
local_450 = local_450 & 0xfffffffd;
|
|
SysFreeString(local_454);
|
|
}
|
|
local_8 = 2;
|
|
if ((local_450 & 1) != 0) {
|
|
local_450 = local_450 & 0xfffffffe;
|
|
SysFreeString(local_474);
|
|
}
|
|
GetCurrentThreadId();
|
|
FUN_1000e34e();
|
|
GetCurrentProcessId();
|
|
GetCurrentProcess();
|
|
(*local_460)();
|
|
CloseHandle(local_45c);
|
|
FreeLibrary(local_464);
|
|
iVar3 = local_458;
|
|
*local_470 = 1;
|
|
local_458 = 0;
|
|
*local_46c = iVar3;
|
|
}
|
|
}
|
|
else {
|
|
uVar9 = FUN_1000e323();
|
|
if ((char)uVar9 == '\0') {
|
|
uVar11 = 0;
|
|
uVar9 = 1;
|
|
puVar2 = FUN_10003248();
|
|
iVar3 = FUN_10003897(puVar2,uVar9);
|
|
puVar2 = FUN_10003248();
|
|
uVar9 = FUN_1000305b(puVar2,iVar3,uVar11);
|
|
pcVar8 = SysFreeString_exref;
|
|
if ((char)uVar9 != '\0') {
|
|
pwVar10 =
|
|
L"Too many dump files have been generated for %s. Maximum allowed per process is %d";
|
|
piVar4 = (int *)FUN_10003248();
|
|
FUN_100030ef(piVar4,pwVar10);
|
|
pcVar8 = SysFreeString_exref;
|
|
}
|
|
}
|
|
else {
|
|
FUN_100042e8(local_444,local_448);
|
|
local_8._0_1_ = 3;
|
|
sVar6 = wcslen(L"*.dmp");
|
|
FUN_1000f52e(local_444,L"*.dmp",sVar6);
|
|
local_464 = (HMODULE)&stack0xfffffb54;
|
|
uStack_4b4 = 0x100116bd;
|
|
basic_string<>(&stack0xfffffb54,local_444);
|
|
local_8._0_1_ = 4;
|
|
local_460 = (FARPROC)auStack_4c8;
|
|
FUN_100042e8(auStack_4c8,*(wchar_t **)this);
|
|
local_8._0_1_ = 3;
|
|
iVar3 = FUN_10010e85();
|
|
if (iVar3 != 0) {
|
|
local_8._0_1_ = 2;
|
|
FID_conflict__Tidy(local_444,'\x01',0);
|
|
goto LAB_10011719;
|
|
}
|
|
local_8._0_1_ = 2;
|
|
FID_conflict__Tidy(local_444,'\x01',0);
|
|
pcVar8 = SysFreeString_exref;
|
|
}
|
|
}
|
|
local_8._0_1_ = 1;
|
|
(*pcVar8)();
|
|
local_8 = (uint)local_8._1_3_ << 8;
|
|
(*pcVar8)();
|
|
local_8 = 0xffffffff;
|
|
(*pcVar8)();
|
|
LAB_10011990:
|
|
FUN_10017473();
|
|
return;
|
|
}
|
|
local_448 = SysAllocString(pwVar10 + 1);
|
|
if (local_448 != (BSTR)0x0) goto LAB_100115d9;
|
|
LAB_10011626:
|
|
HVar5 = -0x7ff8fff2;
|
|
LAB_1001162b:
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_1000134e(HVar5);
|
|
}
|
|
|
|
|
|
```
|
|
|
|
## Catch@1001288b at 1001288b
|
|
|
|
Signature: `undefined * __stdcall Catch@1001288b(void)`
|
|
|
|
```c
|
|
|
|
undefined * Catch_1001288b(void)
|
|
|
|
{
|
|
int iVar1;
|
|
void *pvVar2;
|
|
undefined4 uVar3;
|
|
int unaff_EBP;
|
|
|
|
iVar1 = *(int *)(unaff_EBP + -0x28);
|
|
FUN_100109cb((void *)(unaff_EBP + 0x10),iVar1,"LMXProxyServer.cpp",0x262);
|
|
*(undefined1 *)(unaff_EBP + -4) = 4;
|
|
FUN_100038ee(*(uint *)(iVar1 + 4));
|
|
*(undefined1 *)(unaff_EBP + -4) = 2;
|
|
if (*(undefined4 **)(unaff_EBP + 0x10) != (undefined4 *)0x0) {
|
|
FUN_100038c3(*(undefined4 **)(unaff_EBP + 0x10));
|
|
*(undefined4 *)(unaff_EBP + 0x10) = 0;
|
|
}
|
|
pvVar2 = FUN_1000f7d7((void *)(unaff_EBP + -0x44),iVar1);
|
|
*(undefined1 *)(unaff_EBP + -4) = 5;
|
|
uVar3 = FUN_1000328b((int)pvVar2);
|
|
*(undefined4 *)(unaff_EBP + 0x10) = uVar3;
|
|
*(undefined1 *)(unaff_EBP + -4) = 2;
|
|
FUN_1000425c((undefined4 *)(unaff_EBP + -0x44));
|
|
*(undefined4 *)(unaff_EBP + -4) = 0xffffffff;
|
|
return &DAT_10012902;
|
|
}
|
|
|
|
|
|
```
|
|
|
|
## Catch@10012ac5 at 10012ac5
|
|
|
|
Signature: `undefined * __stdcall Catch@10012ac5(void)`
|
|
|
|
```c
|
|
|
|
undefined * Catch_10012ac5(void)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined4 uVar2;
|
|
int unaff_EBP;
|
|
|
|
FUN_10010994((void *)(unaff_EBP + 0x10),*(void **)(unaff_EBP + -0x18),"LMXProxyServer.cpp",0x294);
|
|
*(undefined1 *)(unaff_EBP + -4) = 4;
|
|
uVar1 = FUN_1000328b(*(int *)(unaff_EBP + -0x18));
|
|
FUN_100038ee(uVar1);
|
|
*(undefined1 *)(unaff_EBP + -4) = 3;
|
|
if (*(undefined4 **)(unaff_EBP + 0x10) != (undefined4 *)0x0) {
|
|
FUN_100038c3(*(undefined4 **)(unaff_EBP + 0x10));
|
|
*(undefined4 *)(unaff_EBP + 0x10) = 0;
|
|
}
|
|
uVar2 = FUN_1000328b(*(int *)(unaff_EBP + -0x18));
|
|
*(undefined4 *)(unaff_EBP + 0x10) = uVar2;
|
|
*(undefined4 *)(unaff_EBP + -4) = 0xffffffff;
|
|
return &DAT_10012b29;
|
|
}
|
|
|
|
|
|
```
|
|
|