[R3/R4 Path A] mxaccess: port Lmx.dll FUN_10100ce0 synthesizer kernel
Path A landed for R3/R4. The byte->MxStatus synthesizer in Lmx.dll is
FUN_10100ce0 (`analysis/ghidra/exports/Lmx.dll.synthesizer-helpers2-decompile.md`),
a 4-byte u32 LE -> 4-tuple MxStatus decoder used by every NMX-frame
parser in Lmx.dll. The kernel is byte-deterministic and context-free,
so it ports as a pure function -- the operation-tracking state
machine the original verdict deferred is NOT required for synthesis.
Bit layout (per FUN_10100ce0 lines 21-24):
bit 31: success (-1 if set, 0 if clear)
bits 27..24: category (4 bits)
bits 23..20: detected_by (4 bits)
bits 15..0: detail (i16 -- low 16 bits, signed)
bits 30..28, 19..16: reserved/padding
Codec changes:
- MxStatus::from_packed_u32() / ::to_packed_u32() -- the kernel +
inverse for round-trip parity.
- MxStatus::from_nmx_response_code() -- the constructed-from-response-
code switch in FUN_1010bd10:741-770 (six proven mappings: 0x01, 0x02
-> CommunicationError + RequestingNmx; 0x03 -> ConfigurationError +
RequestingNmx; 0x04 -> ConfigurationError + RespondingNmx; 0x05 ->
CommunicationError + RespondingNmx; 0x1A -> CommunicationError +
RequestingNmx).
- MxStatusCategory / MxStatusSource: from_i16/to_i16 promoted to const
fn so MxStatus::from_packed_u32 can be const.
- NmxOperationStatusMessage::try_parse_process_data_received_body() --
thin wrapper that peels the outer NmxObservedEnvelope before
delegating to try_parse_inner. Mirrors
NmxOperationStatusMessage.TryParseProcessDataReceivedBody (.NET cs:20-32).
- NmxOperationStatusMessage::promote_to_typed() -- entry point that
returns the existing Status field. Documented as a no-op pass-through
for now (the 5-byte inner-body wire shape is NOT the same field as
the 4-byte packed-u32 the kernel decodes); kept for API symmetry.
- 22 new round-trip tests covering the kernel, the response-code
switch, the proven 0x00/0x41/0xEF completion bytes, and round-trip
for every canonical sentinel.
mxaccess (Session) changes:
- New OperationKind enum (Write/WriteSecured/Read/Subscribe/
Unsubscribe/Activate/Suspend/Other).
- New OperationContext struct (correlation_id, op_kind, reference,
retry_count) -- ground for the F54 follow-on per-operation
correlation work.
- New OperationStatus event type {raw, status, context,
is_during_recovery}, mirroring MxNativeOperationStatusEvent (cs:73-78)
with the typed-MxStatus addition.
- Session::operation_status_events() -> broadcast::Receiver<Arc<
OperationStatus>> + operation_status_stream() Stream variant.
- callback_router() now tries operation-status parsing first, falling
through to subscription messages -- matches MxNativeSession
.OnCallbackReceived dispatch order (cs:574,582,590).
- recover_connection() flips a recovery_active counter (Arc<AtomicU32>
shared with the router) so OperationStatus.is_during_recovery is
populated correctly. Mirrors MxNativeSession._recoveryActive
Volatile.Read at cs:573.
- 3 new router tests covering: status-word frame dispatch + typed
promotion to WriteCompleteOk; completion-only frames stay verbatim;
is_during_recovery is stamped from the live counter.
Per-operation context tracking (correlating completion frames back to
outstanding writes/subscribes via the correlation_id) is filed as F54
in design/followups.md. The synthesizer kernel itself is byte-
deterministic, so the kernel and the correlation work are decoupled.
Ghidra evidence (the next-ring xref walk beyond FUN_10114a90):
- analysis/ghidra/exports/Lmx.dll.set-attribute-result-xrefs.md --
xrefs to OnSetAttributeResult / CancelWithStatus / OperationComplete.
- analysis/ghidra/exports/Lmx.dll.vtable-data-xrefs.md -- vtable-slot
data xrefs for the virtual-dispatch path.
- analysis/ghidra/exports/Lmx.dll.synthesizer-decompile.md --
ScanOnDemandCallback::OperationComplete/MultipleOperationComplete
(FUN_1010b990), RemotePlatformResolver::OperationComplete
(FUN_1010dc80), and the constructed-from-responseCode synthesizer
in FUN_1010bd10 (lines 698-770). FUN_1010bd10 is the wire-frame
receiver that drives the synthesis.
- analysis/ghidra/exports/Lmx.dll.synthesizer-helpers-decompile.md --
FUN_10003fc0 (the <success %d category %d ...> formatter; confirms
the 4-tuple layout), FUN_1008f150 (dispatch helper).
- analysis/ghidra/exports/Lmx.dll.synthesizer-helpers2-decompile.md --
FUN_10100ce0 (the kernel itself), FUN_10100bc0 (3xu16 reader),
FUN_1005e580 (4-byte stream reader), FUN_1010ee00 (sister NMX-frame
parser using the same kernel).
- analysis/ghidra/exports/Lmx.dll.synthesizer-callers-xrefs.md --
caller graph; confirms the kernel is called from many wire-frame
parsers but each parser shares the single 4-byte decoder.
R3/R4 verdict updated in design/70-risks-and-open-questions.md from
"settled at verbatim-preserve" to "settled per Path A". F54 filed in
design/followups.md for the per-operation correlation work.
cargo build / test / clippy -D warnings / RUSTDOCFLAGS=-D warnings doc
all clean. cargo public-api baselines regenerated for mxaccess and
mxaccess-codec.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
# Lmx.dll xrefs
|
||||
|
||||
## 0x114a90 at 10114a90
|
||||
|
||||
Target function: `FUN_10114a90`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `10196410` | `DATA` | `` |
|
||||
|
||||
## 0x100dc750 at 100dc750
|
||||
|
||||
Target function: `FUN_100dc750`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `1018f268` | `DATA` | `` |
|
||||
|
||||
## 0x1010b990 at 1010b990
|
||||
|
||||
Target function: `FUN_1010b990`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `1010cf49` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010e440` | `UNCONDITIONAL_CALL` | `FUN_1010e410` |
|
||||
|
||||
## 0x1010dc80 at 1010dc80
|
||||
|
||||
Target function: `FUN_1010dc80`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `10195488` | `DATA` | `` |
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
# Lmx.dll xrefs
|
||||
|
||||
## 0x1010bd10 at 1010bd10
|
||||
|
||||
Target function: `FUN_1010bd10`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `1010d89b` | `UNCONDITIONAL_CALL` | `FUN_1010d4a0` |
|
||||
|
||||
## 0x1010e410 at 1010e410
|
||||
|
||||
Target function: `FUN_1010e410`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `101956a8` | `DATA` | `` |
|
||||
|
||||
## 0x10101360 at 10101360
|
||||
|
||||
Target function: `FUN_10101360`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `10061e82` | `UNCONDITIONAL_CALL` | `FUN_10061c60` |
|
||||
| `10110335` | `UNCONDITIONAL_CALL` | `` |
|
||||
|
||||
## 0x10100ce0 at 10100ce0
|
||||
|
||||
Target function: `FUN_10100ce0`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `1010c2ea` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010c474` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010c50d` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010c5fb` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010c8ac` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010ca5f` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010cb16` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010cd61` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010f27d` | `UNCONDITIONAL_CALL` | `FUN_1010ee00` |
|
||||
| `1010f365` | `UNCONDITIONAL_CALL` | `FUN_1010ee00` |
|
||||
| `1010fa8d` | `UNCONDITIONAL_CALL` | `FUN_1010ee00` |
|
||||
| `1010facf` | `UNCONDITIONAL_CALL` | `FUN_1010ee00` |
|
||||
|
||||
## 0x10100bc0 at 10100bc0
|
||||
|
||||
Target function: `FUN_10100bc0`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `1010c47e` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010c605` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010ca69` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010cb20` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
|
||||
## 0x1005e580 at 1005e580
|
||||
|
||||
Target function: `FUN_1005e580`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `1010c612` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010ca76` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010f51a` | `UNCONDITIONAL_CALL` | `FUN_1010ee00` |
|
||||
| `1010f8bb` | `UNCONDITIONAL_CALL` | `FUN_1010ee00` |
|
||||
| `1010fa76` | `UNCONDITIONAL_CALL` | `FUN_1010ee00` |
|
||||
| `1010fab8` | `UNCONDITIONAL_CALL` | `FUN_1010ee00` |
|
||||
| `10110415` | `UNCONDITIONAL_CALL` | `FUN_1010ee00` |
|
||||
| `10110440` | `UNCONDITIONAL_CALL` | `FUN_1010ee00` |
|
||||
| `10110513` | `UNCONDITIONAL_CALL` | `FUN_1010ee00` |
|
||||
| `101116fc` | `UNCONDITIONAL_CALL` | `` |
|
||||
| `10111ab6` | `UNCONDITIONAL_CALL` | `` |
|
||||
| `10111d51` | `UNCONDITIONAL_CALL` | `` |
|
||||
| `10111884` | `UNCONDITIONAL_CALL` | `` |
|
||||
| `101118d2` | `UNCONDITIONAL_CALL` | `` |
|
||||
| `10111b52` | `UNCONDITIONAL_CALL` | `` |
|
||||
| `10110be2` | `UNCONDITIONAL_CALL` | `FUN_10110986` |
|
||||
| `10110c03` | `UNCONDITIONAL_CALL` | `FUN_10110986` |
|
||||
|
||||
## 0x10067aa0 at 10067aa0
|
||||
|
||||
Target function: `FUN_10067aa0`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `1006afb2` | `UNCONDITIONAL_CALL` | `FUN_10069c30` |
|
||||
| `101044a9` | `UNCONDITIONAL_CALL` | `Catch@10104467` |
|
||||
| `100fd351` | `UNCONDITIONAL_CALL` | `FUN_100fd200` |
|
||||
| `10067d89` | `UNCONDITIONAL_CALL` | `FUN_10067d30` |
|
||||
| `100fd560` | `UNCONDITIONAL_CALL` | `FUN_100fd400` |
|
||||
| `100ffe3a` | `UNCONDITIONAL_CALL` | `FUN_100ffc90` |
|
||||
| `1010951d` | `UNCONDITIONAL_CALL` | `FUN_10107880` |
|
||||
| `1010bfcc` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010c250` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010c2bb` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010c7a4` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010d27a` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010f497` | `UNCONDITIONAL_CALL` | `FUN_1010ee00` |
|
||||
| `10070743` | `UNCONDITIONAL_CALL` | `FUN_10070360` |
|
||||
| `10070869` | `UNCONDITIONAL_CALL` | `FUN_10070360` |
|
||||
| `10070a01` | `UNCONDITIONAL_CALL` | `FUN_10070360` |
|
||||
|
||||
## 0x100860c0 at 100860c0
|
||||
|
||||
Target function: `FUN_100860c0`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `10069f19` | `UNCONDITIONAL_CALL` | `FUN_10069c30` |
|
||||
| `1006a588` | `UNCONDITIONAL_CALL` | `FUN_10069c30` |
|
||||
| `10138a4b` | `UNCONDITIONAL_CALL` | `FUN_101389c0` |
|
||||
| `1010c158` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010c206` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010c5ba` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010d0b4` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
| `1010d167` | `UNCONDITIONAL_CALL` | `FUN_1010bd10` |
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,574 @@
|
||||
# Lmx.dll selected decompile
|
||||
|
||||
## FUN_10003fc0 at 10003fc0
|
||||
|
||||
Signature: `undefined FUN_10003fc0(void)`
|
||||
|
||||
```c
|
||||
|
||||
wchar_t * __thiscall
|
||||
FUN_10003fc0(wchar_t *param_1,short param_2,undefined4 param_3,undefined4 param_4,short param_5)
|
||||
|
||||
{
|
||||
swprintf_s(param_1,0x104,L"<success %d category %d detectedBy %d detail %d>",(int)param_2,param_3,
|
||||
param_4,(int)param_5);
|
||||
return param_1;
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
## FUN_10016fd0 at 10016fd0
|
||||
|
||||
Signature: `undefined FUN_10016fd0(void)`
|
||||
|
||||
```c
|
||||
|
||||
void __fastcall FUN_10016fd0(int *param_1)
|
||||
|
||||
{
|
||||
byte bStack_17;
|
||||
|
||||
*param_1 = (uint)bStack_17 << 8;
|
||||
param_1[1] = 0;
|
||||
param_1[2] = 0;
|
||||
param_1[3] = 0;
|
||||
param_1[4] = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
## FUN_1008f150 at 1008f150
|
||||
|
||||
Signature: `undefined FUN_1008f150(void)`
|
||||
|
||||
```c
|
||||
|
||||
void __thiscall
|
||||
FUN_1008f150(int param_1,int *param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,
|
||||
undefined4 param_6,undefined4 param_7,undefined4 param_8,undefined4 param_9,
|
||||
undefined4 param_10,undefined4 param_11)
|
||||
|
||||
{
|
||||
int iVar1;
|
||||
char cVar2;
|
||||
undefined4 uVar3;
|
||||
undefined4 uVar4;
|
||||
basic_ostream<unsigned_short,struct_std::char_traits<unsigned_short>_> *pbVar5;
|
||||
int iVar6;
|
||||
int *piVar7;
|
||||
_func_basic_ostream<unsigned_short,struct_std::char_traits<unsigned_short>_>_ptr_basic_ostream<unsigned_short,struct_std::char_traits<unsigned_short>_>_ptr
|
||||
*p_Var8;
|
||||
int *local_258;
|
||||
undefined4 local_254;
|
||||
ulong local_250;
|
||||
ushort local_24c;
|
||||
ushort uStack_24a;
|
||||
uchar local_248 [4];
|
||||
uchar local_244 [4];
|
||||
undefined4 local_240;
|
||||
undefined4 local_23c;
|
||||
undefined4 local_238;
|
||||
undefined4 local_234;
|
||||
undefined4 local_230;
|
||||
undefined4 local_22c;
|
||||
undefined4 local_228;
|
||||
undefined4 local_224;
|
||||
GUID local_220 [33];
|
||||
uint local_8;
|
||||
|
||||
local_8 = DAT_101d60b8 ^ (uint)&stack0xfffffffc;
|
||||
CoCreateGuid(local_220);
|
||||
cVar2 = FUN_100408d0();
|
||||
if (cVar2 != '\0') {
|
||||
uVar3 = FUN_10047fe0(local_220[0].Data1,local_220[0]._4_4_,local_220[0].Data4._0_4_,
|
||||
local_220[0].Data4._4_4_);
|
||||
p_Var8 = endl_exref;
|
||||
uVar4 = (**(code **)(*param_2 + 8))();
|
||||
piVar7 = param_2;
|
||||
pbVar5 = (basic_ostream<unsigned_short,struct_std::char_traits<unsigned_short>_> *)
|
||||
FUN_1001a0e0(*(undefined4 *)(DAT_101d6474 + 0x38),
|
||||
L"CReferenceStringResolver::ResolveReference - reference ",param_2,
|
||||
L" guid ",uVar3,L" ref ",uVar4);
|
||||
pbVar5 = std::basic_ostream<unsigned_short,struct_std::char_traits<unsigned_short>_>::operator<<
|
||||
(pbVar5,piVar7);
|
||||
uVar3 = FUN_1001a0e0(pbVar5);
|
||||
uVar3 = FUN_1001a0e0(uVar3);
|
||||
uVar3 = FUN_1001a0e0(uVar3);
|
||||
pbVar5 = (basic_ostream<unsigned_short,struct_std::char_traits<unsigned_short>_> *)
|
||||
FUN_1001a0e0(uVar3);
|
||||
std::basic_ostream<unsigned_short,struct_std::char_traits<unsigned_short>_>::operator<<
|
||||
(pbVar5,p_Var8);
|
||||
}
|
||||
local_250 = local_220[0].Data1;
|
||||
local_24c = local_220[0].Data2;
|
||||
uStack_24a = local_220[0].Data3;
|
||||
local_244[0] = local_220[0].Data4[4];
|
||||
local_244[1] = local_220[0].Data4[5];
|
||||
local_244[2] = local_220[0].Data4[6];
|
||||
local_244[3] = local_220[0].Data4[7];
|
||||
local_254 = param_11;
|
||||
local_240 = param_7;
|
||||
local_238 = param_9;
|
||||
local_248[0] = local_220[0].Data4[0];
|
||||
local_248[1] = local_220[0].Data4[1];
|
||||
local_248[2] = local_220[0].Data4[2];
|
||||
local_248[3] = local_220[0].Data4[3];
|
||||
local_234 = param_10;
|
||||
local_258 = param_2;
|
||||
iVar1 = *(int *)(param_1 + 0x24);
|
||||
local_22c = param_4;
|
||||
local_23c = param_8;
|
||||
local_228 = param_5;
|
||||
local_230 = param_3;
|
||||
local_224 = param_6;
|
||||
iVar6 = FUN_1008e910(iVar1,*(undefined4 *)(iVar1 + 4),&local_258);
|
||||
if (*(int *)(param_1 + 0x28) == 0x4924923) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
std::_Xlength_error("list<T> too long");
|
||||
}
|
||||
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
|
||||
*(int *)(iVar1 + 4) = iVar6;
|
||||
**(int **)(iVar6 + 4) = iVar6;
|
||||
__security_check_cookie(local_8 ^ (uint)&stack0xfffffffc);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
## FUN_10112f20 at 10112f20
|
||||
|
||||
Signature: `undefined FUN_10112f20(void)`
|
||||
|
||||
```c
|
||||
|
||||
int * __thiscall FUN_10112f20(int *param_1,int *param_2)
|
||||
|
||||
{
|
||||
UINT UVar1;
|
||||
BSTR pOVar2;
|
||||
|
||||
if (*param_1 != *param_2) {
|
||||
AtlComPtrAssign(param_1,*param_2);
|
||||
}
|
||||
if ((BSTR)param_1[1] != (BSTR)param_2[1]) {
|
||||
SysFreeString((BSTR)param_1[1]);
|
||||
pOVar2 = (BSTR)0x0;
|
||||
if ((BSTR)param_2[1] != (BSTR)0x0) {
|
||||
UVar1 = SysStringByteLen((BSTR)param_2[1]);
|
||||
pOVar2 = SysAllocStringByteLen((LPCSTR)param_2[1],UVar1);
|
||||
}
|
||||
param_1[1] = (int)pOVar2;
|
||||
if ((param_2[1] != 0) && (pOVar2 == (BSTR)0x0)) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_100013e0(0x8007000e);
|
||||
}
|
||||
}
|
||||
if ((BSTR)param_1[2] != (BSTR)param_2[2]) {
|
||||
SysFreeString((BSTR)param_1[2]);
|
||||
pOVar2 = (BSTR)0x0;
|
||||
if ((BSTR)param_2[2] != (BSTR)0x0) {
|
||||
UVar1 = SysStringByteLen((BSTR)param_2[2]);
|
||||
pOVar2 = SysAllocStringByteLen((LPCSTR)param_2[2],UVar1);
|
||||
}
|
||||
param_1[2] = (int)pOVar2;
|
||||
if ((param_2[2] != 0) && (pOVar2 == (BSTR)0x0)) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_100013e0(0x8007000e);
|
||||
}
|
||||
}
|
||||
if ((BSTR)param_1[3] != (BSTR)param_2[3]) {
|
||||
SysFreeString((BSTR)param_1[3]);
|
||||
pOVar2 = (BSTR)0x0;
|
||||
if ((BSTR)param_2[3] != (BSTR)0x0) {
|
||||
UVar1 = SysStringByteLen((BSTR)param_2[3]);
|
||||
pOVar2 = SysAllocStringByteLen((LPCSTR)param_2[3],UVar1);
|
||||
}
|
||||
param_1[3] = (int)pOVar2;
|
||||
if ((param_2[3] != 0) && (pOVar2 == (BSTR)0x0)) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_100013e0(0x8007000e);
|
||||
}
|
||||
}
|
||||
if ((BSTR)param_1[4] != (BSTR)param_2[4]) {
|
||||
SysFreeString((BSTR)param_1[4]);
|
||||
pOVar2 = (BSTR)0x0;
|
||||
if ((BSTR)param_2[4] != (BSTR)0x0) {
|
||||
UVar1 = SysStringByteLen((BSTR)param_2[4]);
|
||||
pOVar2 = SysAllocStringByteLen((LPCSTR)param_2[4],UVar1);
|
||||
}
|
||||
param_1[4] = (int)pOVar2;
|
||||
if ((param_2[4] != 0) && (pOVar2 == (BSTR)0x0)) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_100013e0(0x8007000e);
|
||||
}
|
||||
}
|
||||
return param_1;
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
## FUN_10112da0 at 10112da0
|
||||
|
||||
Signature: `undefined FUN_10112da0(void)`
|
||||
|
||||
```c
|
||||
|
||||
void __fastcall FUN_10112da0(undefined4 *param_1)
|
||||
|
||||
{
|
||||
int *piVar1;
|
||||
uint uVar2;
|
||||
void *local_10;
|
||||
undefined1 *puStack_c;
|
||||
int local_8;
|
||||
|
||||
puStack_c = &LAB_1017253f;
|
||||
local_10 = ExceptionList;
|
||||
uVar2 = DAT_101d60b8 ^ (uint)&stack0xfffffffc;
|
||||
ExceptionList = &local_10;
|
||||
*param_1 = PreboundReference::vftable;
|
||||
param_1[1] = PreboundReference::vftable;
|
||||
param_1[3] = PreboundReference::vftable;
|
||||
local_8 = 7;
|
||||
piVar1 = (int *)param_1[0x19];
|
||||
if (piVar1 != (int *)0x0) {
|
||||
(**(code **)(*piVar1 + 8))(piVar1,uVar2);
|
||||
}
|
||||
local_8._0_1_ = 6;
|
||||
SysFreeString((BSTR)param_1[0x2b]);
|
||||
local_8._0_1_ = 5;
|
||||
SysFreeString((BSTR)param_1[0x27]);
|
||||
local_8._0_1_ = 4;
|
||||
if (7 < (uint)param_1[0x21]) {
|
||||
operator_delete((void *)param_1[0x1c]);
|
||||
}
|
||||
param_1[0x21] = 7;
|
||||
param_1[0x20] = 0;
|
||||
*(undefined2 *)(param_1 + 0x1c) = 0;
|
||||
local_8._0_1_ = 3;
|
||||
piVar1 = (int *)param_1[0x1a];
|
||||
if (piVar1 != (int *)0x0) {
|
||||
(**(code **)(*piVar1 + 8))(piVar1);
|
||||
}
|
||||
local_8._0_1_ = 0xc;
|
||||
SysFreeString((BSTR)param_1[0x18]);
|
||||
local_8._0_1_ = 0xb;
|
||||
SysFreeString((BSTR)param_1[0x17]);
|
||||
local_8._0_1_ = 10;
|
||||
SysFreeString((BSTR)param_1[0x16]);
|
||||
local_8._0_1_ = 9;
|
||||
SysFreeString((BSTR)param_1[0x15]);
|
||||
local_8._0_1_ = 2;
|
||||
piVar1 = (int *)param_1[0x14];
|
||||
if (piVar1 != (int *)0x0) {
|
||||
(**(code **)(*piVar1 + 8))(piVar1);
|
||||
}
|
||||
local_8._0_1_ = 1;
|
||||
if (7 < (uint)param_1[0x12]) {
|
||||
operator_delete((void *)param_1[0xd]);
|
||||
}
|
||||
param_1[0x12] = 7;
|
||||
param_1[0x11] = 0;
|
||||
*(undefined2 *)(param_1 + 0xd) = 0;
|
||||
local_8 = (uint)local_8._1_3_ << 8;
|
||||
if (7 < (uint)param_1[0xb]) {
|
||||
operator_delete((void *)param_1[6]);
|
||||
}
|
||||
param_1[0xb] = 7;
|
||||
param_1[10] = 0;
|
||||
*(undefined2 *)(param_1 + 6) = 0;
|
||||
*param_1 = MxConnectionCallback::vftable;
|
||||
ExceptionList = local_10;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
## FUN_101139c0 at 101139c0
|
||||
|
||||
Signature: `undefined FUN_101139c0(void)`
|
||||
|
||||
```c
|
||||
|
||||
undefined4 * __thiscall FUN_101139c0(undefined4 *param_1,short *param_2,undefined4 param_3)
|
||||
|
||||
{
|
||||
short sVar1;
|
||||
uint uVar2;
|
||||
short *psVar3;
|
||||
void *local_10;
|
||||
undefined1 *puStack_c;
|
||||
undefined4 local_8;
|
||||
|
||||
puStack_c = &LAB_101726b3;
|
||||
local_10 = ExceptionList;
|
||||
uVar2 = DAT_101d60b8 ^ (uint)&stack0xfffffffc;
|
||||
ExceptionList = &local_10;
|
||||
*param_1 = MxConnectionCallback::vftable;
|
||||
local_8 = 0;
|
||||
param_1[1] = CReferenceToResolve::vftable;
|
||||
*(undefined1 *)(param_1 + 2) = 0;
|
||||
param_1[3] = RedundancyResolutionStatusCallback::vftable;
|
||||
*param_1 = PreboundReference::vftable;
|
||||
param_1[1] = PreboundReference::vftable;
|
||||
param_1[3] = PreboundReference::vftable;
|
||||
*(undefined1 *)(param_1 + 4) = 0;
|
||||
param_1[5] = 0;
|
||||
param_1[0xb] = 7;
|
||||
param_1[10] = 0;
|
||||
*(undefined2 *)(param_1 + 6) = 0;
|
||||
psVar3 = param_2;
|
||||
do {
|
||||
sVar1 = *psVar3;
|
||||
psVar3 = psVar3 + 1;
|
||||
} while (sVar1 != 0);
|
||||
FUN_100363d0(param_2,(int)psVar3 - (int)(param_2 + 1) >> 1);
|
||||
local_8._1_3_ = (undefined3)((uint)local_8 >> 8);
|
||||
param_1[0x12] = 7;
|
||||
param_1[0x11] = 0;
|
||||
*(undefined2 *)(param_1 + 0xd) = 0;
|
||||
local_8._0_1_ = 2;
|
||||
FUN_10113900(param_2);
|
||||
param_1[0x19] = param_3;
|
||||
param_1[0x1a] = 0;
|
||||
*(undefined1 *)(param_1 + 0x1b) = 0;
|
||||
param_1[0x21] = 7;
|
||||
param_1[0x20] = 0;
|
||||
*(undefined2 *)(param_1 + 0x1c) = 0;
|
||||
param_1[0x27] = 0;
|
||||
param_1[0x2a] = 0;
|
||||
param_1[0x2b] = 0;
|
||||
local_8 = CONCAT31(local_8._1_3_,8);
|
||||
*(undefined1 *)(param_1 + 0x2c) = 0;
|
||||
param_1[0x29] = 0;
|
||||
if (DAT_101d8c40 == 0) {
|
||||
FUN_10113070(uVar2);
|
||||
}
|
||||
FUN_101133d0();
|
||||
(**(code **)(*(int *)param_1[0x19] + 4))((int *)param_1[0x19]);
|
||||
ExceptionList = local_10;
|
||||
return param_1;
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
## FUN_10113b10 at 10113b10
|
||||
|
||||
Signature: `undefined FUN_10113b10(void)`
|
||||
|
||||
```c
|
||||
|
||||
undefined4 * __thiscall FUN_10113b10(undefined4 *param_1,int *param_2,undefined4 param_3)
|
||||
|
||||
{
|
||||
undefined4 *puVar1;
|
||||
short sVar2;
|
||||
char cVar3;
|
||||
uint uVar4;
|
||||
int iVar5;
|
||||
short *psVar6;
|
||||
short *psVar7;
|
||||
undefined2 *puVar8;
|
||||
void *local_10;
|
||||
undefined1 *puStack_c;
|
||||
undefined1 local_8;
|
||||
undefined3 uStack_7;
|
||||
|
||||
puStack_c = &LAB_1017276f;
|
||||
local_10 = ExceptionList;
|
||||
uVar4 = DAT_101d60b8 ^ (uint)&stack0xfffffffc;
|
||||
ExceptionList = &local_10;
|
||||
*param_1 = MxConnectionCallback::vftable;
|
||||
param_1[1] = CReferenceToResolve::vftable;
|
||||
*(undefined1 *)(param_1 + 2) = 0;
|
||||
param_1[3] = RedundancyResolutionStatusCallback::vftable;
|
||||
*param_1 = PreboundReference::vftable;
|
||||
param_1[1] = PreboundReference::vftable;
|
||||
param_1[3] = PreboundReference::vftable;
|
||||
*(undefined1 *)(param_1 + 4) = 0;
|
||||
param_1[5] = 0;
|
||||
param_1[0xb] = 7;
|
||||
param_1[10] = 0;
|
||||
*(undefined2 *)(param_1 + 6) = 0;
|
||||
param_1[0x12] = 7;
|
||||
param_1[0x11] = 0;
|
||||
*(undefined2 *)(param_1 + 0xd) = 0;
|
||||
uStack_7 = 0;
|
||||
local_8 = 2;
|
||||
param_1[0x14] = param_2;
|
||||
if (param_2 != (int *)0x0) {
|
||||
(**(code **)(*param_2 + 4))(param_2,uVar4);
|
||||
}
|
||||
param_1[0x15] = 0;
|
||||
param_1[0x16] = 0;
|
||||
param_1[0x17] = 0;
|
||||
param_1[0x18] = 0;
|
||||
param_1[0x19] = param_3;
|
||||
param_1[0x1a] = 0;
|
||||
*(undefined1 *)(param_1 + 0x1b) = 0;
|
||||
param_1[0x21] = 7;
|
||||
param_1[0x20] = 0;
|
||||
*(undefined2 *)(param_1 + 0x1c) = 0;
|
||||
param_1[0x27] = 0;
|
||||
param_1[0x2a] = 0;
|
||||
param_1[0x2b] = 0;
|
||||
_local_8 = CONCAT31(uStack_7,0xe);
|
||||
*(undefined1 *)(param_1 + 0x2c) = 0;
|
||||
param_1[0x29] = 0;
|
||||
if (DAT_101d8c40 == 0) {
|
||||
FUN_10113070();
|
||||
}
|
||||
if (param_2 != (int *)0x0) {
|
||||
puVar1 = param_1 + 0x15;
|
||||
SysFreeString((BSTR)param_1[0x15]);
|
||||
*puVar1 = 0;
|
||||
iVar5 = (**(code **)(*(int *)param_1[0x14] + 0x20))((int *)param_1[0x14],puVar1);
|
||||
if (iVar5 < 0) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_1005bf30(iVar5,0,"E:\\BldSrc\\6\\s\\ExtInterfaces\\Lmx\\IMxReferencePtr.h",0x3f);
|
||||
}
|
||||
psVar7 = (short *)*puVar1;
|
||||
if (psVar7 == (short *)0x0) {
|
||||
psVar7 = &DAT_1017a514;
|
||||
}
|
||||
psVar6 = psVar7;
|
||||
do {
|
||||
sVar2 = *psVar6;
|
||||
psVar6 = psVar6 + 1;
|
||||
} while (sVar2 != 0);
|
||||
FUN_100363d0(psVar7,(int)psVar6 - (int)(psVar7 + 1) >> 1);
|
||||
puVar1 = param_1 + 0x15;
|
||||
SysFreeString((BSTR)param_1[0x15]);
|
||||
*puVar1 = 0;
|
||||
iVar5 = (**(code **)(*(int *)param_1[0x14] + 0x20))((int *)param_1[0x14],puVar1);
|
||||
if (iVar5 < 0) {
|
||||
/* WARNING: Subroutine does not return */
|
||||
FUN_1005bf30(iVar5,0,"E:\\BldSrc\\6\\s\\ExtInterfaces\\Lmx\\IMxReferencePtr.h",0x3f);
|
||||
}
|
||||
puVar8 = (undefined2 *)*puVar1;
|
||||
if (puVar8 == (undefined2 *)0x0) {
|
||||
puVar8 = &DAT_1017a514;
|
||||
}
|
||||
cVar3 = FUN_10134a10(puVar8);
|
||||
if (cVar3 != '\0') {
|
||||
psVar6 = (short *)FUN_1005f6b0();
|
||||
psVar7 = psVar6;
|
||||
do {
|
||||
sVar2 = *psVar7;
|
||||
psVar7 = psVar7 + 1;
|
||||
} while (sVar2 != 0);
|
||||
FUN_100363d0(psVar6,(int)psVar7 - (int)(psVar6 + 1) >> 1);
|
||||
}
|
||||
}
|
||||
FUN_101133d0();
|
||||
(**(code **)(*(int *)param_1[0x19] + 4))((int *)param_1[0x19]);
|
||||
ExceptionList = local_10;
|
||||
return param_1;
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
## FUN_10114620 at 10114620
|
||||
|
||||
Signature: `undefined FUN_10114620(void)`
|
||||
|
||||
```c
|
||||
|
||||
void __fastcall FUN_10114620(int param_1)
|
||||
|
||||
{
|
||||
char cVar1;
|
||||
undefined4 uVar2;
|
||||
undefined4 uVar3;
|
||||
undefined1 local_18 [4];
|
||||
void *local_14;
|
||||
void *local_10;
|
||||
undefined1 *puStack_c;
|
||||
undefined4 local_8;
|
||||
|
||||
local_8 = 0xffffffff;
|
||||
puStack_c = &LAB_10172866;
|
||||
local_10 = ExceptionList;
|
||||
ExceptionList = &local_10;
|
||||
if (*(char *)(*(int *)(param_1 + 100) + 0x6dc) != '\0') {
|
||||
cVar1 = FUN_1005faf0(DAT_101d60b8 ^ (uint)&stack0xfffffffc);
|
||||
if (cVar1 == '\0') {
|
||||
local_14 = operator_new(0x1c);
|
||||
local_8 = 0;
|
||||
if (local_14 == (void *)0x0) {
|
||||
local_14 = (void *)0x0;
|
||||
}
|
||||
else {
|
||||
local_14 = (void *)FUN_10060b80();
|
||||
}
|
||||
local_8 = 0xffffffff;
|
||||
FUN_1003ec10(*(undefined4 *)(param_1 + 0x50));
|
||||
uVar3 = 0;
|
||||
uVar2 = FUN_1002c750(&local_14);
|
||||
FUN_10066e70(local_18,uVar2,uVar3);
|
||||
local_14 = operator_new(0x1c);
|
||||
local_8 = 1;
|
||||
if (local_14 == (void *)0x0) {
|
||||
local_14 = (void *)0x0;
|
||||
}
|
||||
else {
|
||||
local_14 = (void *)FUN_10060b80();
|
||||
}
|
||||
local_8 = 0xffffffff;
|
||||
FUN_1003ec10(*(undefined4 *)(param_1 + 0x50));
|
||||
uVar3 = 0;
|
||||
uVar2 = FUN_1002c750(&local_14);
|
||||
FUN_10066e70(local_18,uVar2,uVar3);
|
||||
*(undefined1 *)(*(int *)(param_1 + 100) + 0x6dd) = 1;
|
||||
}
|
||||
}
|
||||
ExceptionList = local_10;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
## FUN_10112cd0 at 10112cd0
|
||||
|
||||
Signature: `undefined FUN_10112cd0(void)`
|
||||
|
||||
```c
|
||||
|
||||
void __fastcall FUN_10112cd0(int param_1)
|
||||
|
||||
{
|
||||
uint uVar1;
|
||||
void *pvVar2;
|
||||
void *local_10;
|
||||
undefined1 *puStack_c;
|
||||
undefined4 local_8;
|
||||
|
||||
local_8 = 0xffffffff;
|
||||
puStack_c = &LAB_1017247b;
|
||||
local_10 = ExceptionList;
|
||||
uVar1 = DAT_101d60b8 ^ (uint)&stack0xfffffffc;
|
||||
ExceptionList = &local_10;
|
||||
pvVar2 = operator_new(0x38);
|
||||
local_8 = 0;
|
||||
if (pvVar2 != (void *)0x0) {
|
||||
FUN_1009f240(*(undefined4 *)(param_1 + 0x50),*(undefined2 *)(*(int *)(param_1 + 100) + 0x2ac),
|
||||
param_1,*(int *)(param_1 + 100));
|
||||
}
|
||||
local_8 = 0xffffffff;
|
||||
(*(code *)**(undefined4 **)(param_1 + 4))(uVar1);
|
||||
ExceptionList = local_10;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,134 @@
|
||||
# Lmx.dll xrefs
|
||||
|
||||
## 0x10196410 at 10196410
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x10196400 at 10196400
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x101963f8 at 101963f8
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x101963f0 at 101963f0
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `10112dd3` | `DATA` | `FUN_10112da0` |
|
||||
| `10113a13` | `DATA` | `FUN_101139c0` |
|
||||
| `10113b5f` | `DATA` | `FUN_10113b10` |
|
||||
|
||||
## 0x101963e8 at 101963e8
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| `10112dda` | `DATA` | `FUN_10112da0` |
|
||||
| `10113a1a` | `DATA` | `FUN_101139c0` |
|
||||
| `10113b66` | `DATA` | `FUN_10113b10` |
|
||||
|
||||
## 0x101963e0 at 101963e0
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x10196418 at 10196418
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x10196420 at 10196420
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x1018f268 at 1018f268
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x1018f260 at 1018f260
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x1018f258 at 1018f258
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x1018f270 at 1018f270
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x10195488 at 10195488
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x10195480 at 10195480
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x10195478 at 10195478
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
## 0x10195490 at 10195490
|
||||
|
||||
Target function: `(none)`
|
||||
|
||||
| From | Ref type | Caller function |
|
||||
| --- | --- | --- |
|
||||
| (none) | | |
|
||||
|
||||
Reference in New Issue
Block a user