Jeg er ikke ny på StackExchange, men jeg er helt ny inden for reverse engineering, så vær tålmodig med mig! : P
På nuværende tidspunkt har jeg at gøre med en eksekverbar fil, som jeg gerne vil ændre lidt til personlig brug; applikationens kildekode er ikke tilgængelig, så jeg kan kun ændre det eller prøve. Jeg bruger både IDA Pro 6.1 og OllyDBG 2.0 som værktøj.
For at være præcis vil jeg bare øge mængden af CFG_ENTRY, som applikationen kan læse fra 500
til 1000
i metoden ReadCfgFile
som tilsyneladende har en statisk hukommelsesregion forudlokaliseret ved kompileringstid:
.text: 008F2860 ReadCfgFile proc nær ved ; DATA XREF: .rdata: 0137A1ECo.text: 008F2860 var_20 = dword ptr -20h.text: 008F2860 var_1C = dword ptr -1Ch.text: 008F2860 var_18 = dword ptr -18h.text: 008F2860 var_C = dword ptr -0Ch.text: 008F2860 var_4 = dword ptr -4.text: 008F2860 arg_0 = dword ptr 4.text: 008F2860 arg_4 = byte ptr 8.text: 008F2860.text: 008F2860 push 0FFFFFFFFh.text: 008F2862 mov eax, large fs: 0.text: 008F2868 push offset sub_1288B18.text: 008F286D push eax.text: 008F286E mov large fs: 0, esp.text: 008F2875 sub esp, 14h.text: 008F2878 push ebx.text: 008F2879 push ebp.text: 008F287A push esi.text: 008F287B skub edi.text: 008F287C mov edi, [esp + 30h + arg_0] .text: 008F2880 mov eax, [edi + 10h] .text: 008F2883 cmp eax, [edi + 8] .te xt: 008F2886 mov esi, ecx.text: 008F2888 jnb loc_8F2930.text: 008F288E mov edi, edi.text: 008F2890.text: 008F2890 loc_8F2890: .text: 008F2890 mov eax, [esi + 79954h] .text: 008F96 3E8h
.text: 008F289B jge loc_8F29DF.text: 008F28A1 mov edx, eax.text: 008F28A3 shl edx, 5.text: 008F28A6 lea ecx, [eax + 1] .text: 008F28A9 sub edx, eax.text: 008F28AB lea eax, [ eax + edx * 8] .text: 008F28AE mov [esi + 79954h], ecx.text: 008F28B4 push edi.text: 008F28B5 lea ecx, [esi + eax * 4 + 4] .text: 008F28B9 call ReadEDURecord.text: 008F28BE test al, al.text: 008F28C0 jz loc_8F2947.text: 008F28C6 mov eax, [esi + 79954h] .text: 008F28CC mov ecx, eax.text: 008F28CE shl ecx, 5.text: 008F28D1 sub ecx, eax.text: 008F28D3 lea edx, [eax + ecx * 8] .text: 008F28D6 mov ebp, [esi + edx * 4-3E0h] .text: 008F28DD lea eax, [esp + 30h + arg_0] .text: 008F28E1 lea ebx, [esi + 79958h] .text: 008F28E7 push eax.text: 008F28E8 mov ecx, ebx.text: 008F28EA mov [esp + 34h + arg_0], ebp.text: 008F28EE call sub_437DF0.text: 008F28F3 test eax, eax. tekst: 008F28F5 jz kort loc_8F2902.text: 008F28F7 cmp [esp + 30h + arg_4], 0.text: 008F28FC jz loc_8F2994.text: 008F2902.text: 008F2902 loc_8F2902: .text: 008F2902 mov ecx, [es]. : 008F2908 sub ecx, 1.text: 008F290B lea edx, [esp + 30h + arg_0] .text: 008F290F push edx.text: 008F2910 lea eax, [esp + 34h + var_20] .text: 008F2914 mov [esp + 34h + arg_0], ecx.text: 008F2918 push eax.text: 008F2919 mov ecx, ebx.text: 008F291B mov [esp + 38h + var_20], ebp.text: 008F291F call sub_437890
.text: 008F2924 mov ecx, [edi + 10h] .text: 008F2927 cmp ecx, [edi + 8] .text: 008F292A jb loc_8F2890.text: 008F2930.text: 008F2930 loc_8F2930: .text: 008F2930 pop edi.text: 008F2931 pop esi.text: 008F2932 pop ebp.text: 008F2933 mov al, 1.text: 008F2935 pop ebx.text: 008F2936 mov ecx, [esp + 20h + var_C] .text: 008F293A mov store fs: 0, ecx.text: 008F2941 add esp, 20h.text: 008F2944 retn 8.text: 008F2947.text: 008F2947 loc_8F2947: .text: 008F2947 push 0.text: 008F2949 call sub_D386E0.text: 008F294E add esp, 4. text: 008F2951 mov ecx, edi. tekst: 008F2953 mov esi, eax.text: 008F2955 call sub_D4D270.text: 008F295A push eax; ArgList.text: 008F295B push offset aErrMsg_1; Fejlmeddelelse.tekst: 008F2960 kald sub_D386E0.tekst: 008F2965 tilføj esp, 8. tekst: 008F2968 kald sub_D388C0.tekst: 008F296D lea edx, [esp + 30h + var_20]. Tekst: 008F2971 skub edx.tekst: 008F2972 lea ecx, [ esp + 34h + var_18] .text: 008F2976 mov [esp + 34h + var_20], eax.text: 008F297A mov [esp + 34h + var_1C], 640h.text: 008F2982 kald sub_403D60.text: 008F2987 mov [esp + 30h + var_4], 0.text: 008F298F jmp loc_8F2A27.text: 008F2994.text: 008F2994 loc_8F2994: .text: 008F2994 push 0.text: 008F2996 call sub_D386E0.text: 008F299B add esp, 4.text: 008F299. : 008F29A0 mov esi, eax.text: 008F29A2 call sub_D4D270.text: 008F29A7 push eax
.tekst: 008F29A8 push ebp; ArgList.text: 008F29A9 push offset aErrMsg_2; Fejlmeddelelse.tekst: 008F29AE kald sub_D386E0.text: 008F29B3 tilføj esp, 0Ch.tekst: 008F29B6 kald sub_D388C0.text: 008F29BB mov [esp + 30h + var_20], eax.text: 008F29BF lea eax, [esp + 30h + var_20] .text: 008F29C3 push eax.text: 008F29C4 lea ecx, [esp + 34h + var_18] .text: 008F29C8 mov [esp + 34h + var_1C], 640h.text: 008F29D0 call sub_403D60.text: 008F29D5 mov [esp + 30h + var_4], 1.text: 008F29DD jmp kort loc_8F2A27.text: 008F29DF.text: 008F29DF loc_8F29DF: .text: 008F29DF push 0.text: 008F29E1 kald sub_D386E0.text: 008F29E6 tilføj esp, 4.text: 008F29E. tekst: 008F29EB mov esi, eax.text: 008F29ED kald sub_D4D270.text: 008F29F2 push eax; ArgList.text: 008F29F3 push offset aErrMsg_0; Fejlmeddelelse.tekst: 008F29F8 kald sub_D386E0.tekst: 008F29FD tilføj esp, 8. tekst: 008F2A00 kald sub_D388C0.tekst: 008F2A05 lea ecx, [esp + 30h + var_20] .tekst: 008F2A09 push ecx.text: 008F2A0A leax esp + 34h + var_18] .text: 008F2A0E mov [esp + 34h + var_20], eax.text: 008F2A12 mov [esp + 34h + var_1C], 640h.text: 008F2A1A kald sub_403D60.text: 008F2A1F mov [esp + 30h + var_4], 2.text: 008F2A27.text: 008F2A27 loc_8F2A27: .text: 008F2A27 mov eax, [esp + 30h + var_18] .text: 008F2A2B test eax, eax.text: 008F2A2D jz kort loc_8F2A3A.text: 008F2. tekst: 008F2A30 push eax
.tekst: 008F2A31 kald ds: ?? $? 6U? $ char_traits @ D @ std @@@ std @@ YAAAV? $ basic_ostream @ DU? $ char_traits @ D @ std @@@ 0 @ AAV10 @ PBD @ Z; std :: operator<<<std :: char_traits<char>> (std :: basic_ostream<char, std :: char_traits<char>> &, char const *) tekst:. 008F2A37 add esp, 8.text: 008F2A3A.text: 008F2A3A loc_8F2A3A: .text: 008F2A3A lea ECx, [esp + 30h + var_18] .text: 008F2A3E mov [esp + 30h + var_4], 0FFFFFFFFh.text: 008F2A46 call sub_403DF0.text: 008F2A4B mov ecx, [esp + 30h + var_C] .text: 008F2A4F pop edi.text: 008F2A esi.text: 008F2A51 pop ebp.text: 008F2A52 xor al, al.text: 008F2A54 pop ebx.text: 008F2A55 mov large fs: 0, ecx.text: 008F2A5C add esp, 20h.text: 008F2A5F retn 8.text: 008F2A5F ReadCfgFile endp
[EDIT 1 - Alt hvad jeg burde have kendt sinc i begyndelsen!]
Efter at have fulgt forslagene i svaret fra @sealed ... brugte jeg en klasseinspektør til at opdage den virtuelle funktionstabel, og jeg fandt den fulde klassedeskriptor. Nå ... faktisk er der to klasser, der henviser til min målmetode ReadCfgFile
og ingen direkte opkald til den i hele den eksekverbare:
.rdata: 0137A1D4; klasse DATABASE_TABLE<CFG_ENTRY, 500, usigneret int> [SI] O: 0, A: 0.rdata: 0137A1D4 dd offset ?? _ R4? $ DATABASE_TABLE @ UCFG_ENTRY @@ $ 0BPE @ I @@ 6B; RTTI Complete Object Locator.rdata: 0137A1D8; const DATABASE_TABLE<struct CFG_ENTRY, 500, usigneret int> VF Table.rdata: 0137A1D8 ?? _ 7? $ DATABASE_TABLE @ UCFG_ENTRY @@ $ 0BPE @ I @@ 6B @ dd offset sub_8EF0F; DATA XREF: sub_8EEFC0 + 1Do.rdata: 0137A1DC dd offset nullsub_648.rdata: 0137A1E0 dd offset sub_8EAB30
.rdata: 0137A1E4 dd offset sub_8EF060.rdata: 0137A1E8 dd offset sub_8EE500.rdata: 0137A1EC dd offset ReadCfgFile.rdata: 0137A1F0; klasse CFG_DB: DATABASE_TABLE<CFG_ENTRY, 500, usigneret int> [SI] O: 0, A: 0.rdata: 0137A1F0 dd offset ?? _ R4CFG_DB @@ 6B @; RTTI Complete Object Locator.rdata: 0137A1F4; const CFG_DB VFTable.rdata: 0137A1F4 ?? _ 7UNIT_DB @@ 6B @ dd offset sub_8EF2B0; DATA XREF: sub_8EF290 + 8o.rdata: 0137A1F8 dd offset nullsub_648.rdata: 0137A1FC dd offset sub_8EAB30.rdata: 0137A200 dd offset sub_8EF060.rdata: 0137A204 dd offset sub_8EE8B0dAd: offset kode>
[EDIT 2 - Eventyret fortsætter! Yay!]
Efter at have læst @Guntram Blohms svar, undersøgte jeg mere for at indsamle og analysere de data, han foreslog. Den første ting, jeg gjorde, er at analysere den eksekverbare med PEiD, og her er de oplysninger, jeg fik fra den:
Compiler: Microsoft Visual C ++ 7.0 Method2 [Debug] Entropy: 6.24 (Ikke pakket) Linker Info: 7.10
Når jeg indstiller et breakpoint på min ReadCfgFile
-metode, her er hvad jeg får fra OllyDBG-stakken:
CPU StackAddress Value ASCII Comments0018B2C0 [008EE644 D�. ; TILBAGE til myapp.008EE644
Og 008EE644
er en lille del af følgende metode, der efter det jeg kan forstå leder efter konfigurationsfilen og starter rutinen til læsning, men uden et eksplicit opkald til ReadCfgFile
(offset fremhævet):
.text: 008EE5D0 sub_8EE5D0 proc near; KODE XREF: sub_411B20 + 2CBp.text: 008EE5D0 var_41 = byte ptr -41h.text: 008EE5D0 var_40 = dword ptr -40h.text: 008EE5D0 var_3C = dword ptr -3Ch.text: 008EE5D0 var_38 = byte ptr -38h. var_34 = dword ptr -34h.text: 008EE5D0 var_30 = dword ptr -30h.text: 008EE5D0 var_2C = byte ptr -2Ch.text: 008EE5D0 var_C = dword ptr -0Ch
.text: 008EE5D0 var_4 = dword ptr -4.text: 008EE5D0.text: 008EE5D0 push 0FFFFFFFFh.text: 008EE5D2 push offset SEH_8EE5D0.text: 008EE5D7 mov eax, large fs: 0.text: 008EE5DD push eax.DE mov: 00EE fs: 0, esp.text: 008EE5E5 sub esp, 38h.text: 008EE5E8 push ebx.text: 008EE5E9 push ebp.text: 008EE5EA mov ebx, ecx.text: 008EE5EC push offset aCfgFile; "application.cfg" .text: 008EE5F1 mov [esp + 50h + var_30], ebx.text: 008EE5F5 call sub_41BD00.text: 008EE5FA add esp, 4.text: 008EE5FD push eax.text: 008EE5FE lea ecx, [esp + 50h + var_38] .text: 008EE602 call sub_F018E0.text: 008EE607 xor ebp, ebp.text: 008EE609 push ebp.text: 008EE60A lea eax, [esp + 50h + var_38] .text: 008EE60E push eax.text: 008EE60F lea ecx, [esp + 54h + var_2C] .text: 008EE613 mov [esp + 54h + var_4], ebp.text: 008EE617 kald sub_D50170.text: 008EE61C lea ecx, [esp + 4Ch + var_38]; ugyldig * .text: 008EE620 mov byte ptr [esp + 4Ch + var_4], 2. tekst: 008EE625 kald sub_EFFE30.text: 008EE62A mov edx, [ebx] .text: 008EE62C mov ecx, ebx.text: 008EE62E mov [ebx + 7A938h], ebp.text: 008EE634 kald dword ptr [edx + 4] .text: 008EE637 mov eax, [ebx] .text: 008EE639 push ebp.text: 008EE63A lea ecx, [esp + 50h + var_2C] .text: 008EE63E skub ecx.text: 008EE63F mov ecx, ebx.text: 008EE641 kald dword ptr [eax + 14h]
.tekst: 008EE644; -------------------------------------------------- ------------------------- .text: 008EE644 test al, al; HER ER STAKHENVISNINGEN. Tekst: 008EE644; -------------------------------------------------- ------------------------- .text: 008EE646 jnz kort loc_8EE66C.text: 008EE648 lea ecx, [esp + 4Ch + var_2C] .text: 008EE64C mov [esp + 4Ch + var_4], 0FFFFFFFFh.text: 008EE654 kald sub_D4BB30.text: 008EE659 pop ebp.text: 008EE65A xor al, al.text: 008EE65C pop ebx.text: 008EE65D mov ecx, [esp + 44h + var_C] .text: 008EE661 mov large fs: 0, ecx.text: 008EE668 add esp, 44h.text: 008EE66B retn.text: 008EE66C.text: 008EE66C loc_8EE66C: .text: 008EE66C xor edx, edx.text: 008EE66E eller eax, 0FFFFFFFFh .text: 008EE671 mov dword_1986644, edx.text: 008EE677 mov dword_1986650, eax.text: 008EE67C push esi.text: 008EE67D mov dword_1986648, edx.text: 008EE683 mov dword_1986654, eax.text: 008EE688 push edi.text: 008EE689 mov dword_198664C, edx.text: 008EE68F mov dword_1986658, eax.text: 008EE694 xor edi, edi.text: 008EE696 cmp [ebx + 79954h], eb jle loc_8EE727.text: 008EE6A2 lea esi, [ebx + 40h] .text: 008EE6A5 jmp kort loc_8EE6B0.text: 008EE6A7 align 10h.text: 008EE6B0.text: 008EE6B0 loc_8EE6B0: .text: 008EE6B0 mov .x. 008EE6B2 mov cx, [esi + 92h] .tekst: 008EE6B9 lea eax, ds: 1986644h [eax * 2] .tekst: 008EE6C0 mov axe, [eax] .text: 008EE6C3 cmp økse, cx
.text: 008EE6C6 jnb kort loc_8EE6CA.text: 008EE6C8 mov eax, ecx.text: 008EE6CA.text: 008EE6CA loc_8EE6CA: .text: 008EE6CA mov ecx, [esi] .text: 008EE6CC mov ord ptr dword_1986644 [ecx *] .text: 008EE6D4 mov eax, [esi] .text: 008EE6D6 mov cx, [esi + 92h] .text: 008EE6DD lea eax, ds: 1986650h [eax * 2] .text: 008EE6E4 mov ax, [eax] .text: 008EE6E7 cmp ax, cx.text: 008EE6EA jb short loc_8EE6EE.text: 008EE6EC mov eax, ecx.text: 008EE6EE.text: 008EE6EE loc_8EE6EE: .text: 008EE6EE mov edx, [esi] .text: 008EE6F0 lea ecx, [esi- 3Ch] .text: 008EE6F3 mov word ptr dword_1986650 [edx * 2], ax.text: 008EE6FB call sub_8ED600.text: 008EE700 push eax.text: 008EE701 mov eax, [ebx + 7A938h] .text: 008EE707 push eax.text: 008EE708 call sub_F1E550.text: 008EE70D add edi, 1.text: 008EE710 add esp, 8.text: 008EE713 mov [ebx + 7A938h], eax.text: 008EE719 add esi, 3E4h.text: 008EE71F cmp edi , [ebx + 79954h] .text: 008EE725 jl kort loc_8EE6B0.text: 008EE727.text: 008EE727 loc_8EE727: .text: 008EE727 xor esi, esi.text: 008EE729 cmp dword_1667290, ebp.text: 008EE72h mov [esp ], esi.text: 008EE733 jbe loc_8EE840.text: 008EE739 lea esp, [esp + 0] .text: 008EE740.text: 008EE740 loc_8EE740: .text: 008EE740 cmp [ebx + 79954h], ebp.text: 008EE746 mov [esp + 54h + var_41], 0.text: 008EE74B mov [esp + 54h + var_40], ebp.text: 008EE74F mov [esp + 54h + var_34], ebp
.text: 008EE753 jle loc_8EE7D9.text: 008EE759 mov ebp, 1.text: 008EE75E mov ecx, esi.text: 008EE760 shl ebp, cl.text: 008EE762 lea edi, [ebx + 3B0h] .text: 008EE768.text: 008EE768 loc_8EE768: .text: 008EE768 cmp [esp + 54h + var_41], 0.text: 008EE76D jnz kort loc_8EE77F.text: 008EE76F test [edi-2Ch], ebp.text: 008EE772 jz kort loc_8EE77F.text: 008EE774 testbyte ptr [ edi + 3], 20h.text: 008EE778 jz kort loc_8EE77F.text: 008EE77A mov [esp + 54h + var_41], 1.text: 008EE77F.text: 008EE77F loc_8EE77F: .text: 008EE77F xor esi, esi.text: 008EE781 xor eax, eax.text: 008EE783.text: 008EE783 loc_8EE783: .text: 008EE783 mov ecx, [edi-24h] .text: 008EE786 test [eax + ecx], ebp.text: 008EE789 jz kort loc_8EE7AF.text: 008EE78B cmp eax, 10h.text: 008EE78E jnb loc_8EE89B.text: 008EE794 mov ecx, esi.text: 008EE796 shr ecx, 5.text: 008EE799 lea edx, [esp + ecx * 4 + 54h + var_40]. tekst: 008EE79D mov ecx, esi.text: 008EE79F og ecx, 1Fh.text: 008EE7A2 mov ebx, 1. tekst: 008EE7A7 shl ebx, cl.text: 008EE7A9 eller [edx], ebx.text: 008EE7AB mov ebx, [esp + 54h + var_30] .text: 008EE7AF.text: 008EE7AF loc_8EE7AF: .text: 008EE7AF add eax, 4.text: 008EE7B2 add esi, 1.text: 008EE7B5 cmp eax, 10h.text: 008EE7B8 jb short loc_8EE787.text: 00 mov eax, [esp + 54h + var_34] .text: 008EE7BE tilføj eax, 1. text: 008EE7C1 tilføj edi, 3E4h
.text: 008EE7C7 cmp eax, [ebx + 79954h] .text: 008EE7CD mov [esp + 54h + var_34], eax.text: 008EE7D1 jl kort loc_8EE768.text: 008EE7D3 mov esi, [esp + 54h + var_3C] .text: 008EE7D7 xor ebp, ebp.text: 008EE7D9.text: 008EE7D9 loc_8EE7D9: .text: 008EE7D9 push esi.text: 008EE7DA call sub_8D1490.text: 008EE7DF mov edi, eax.text: 008EE7E1 add esp by, 4.text [edi + 0BCh], 0.text: 008EE7EB jz short loc_8EE82D.text: 008EE7ED xor esi, esi.text: 008EE7EF cmp esi, 4.text: 008EE7F2 jnb loc_8EE8A4.text: 008EE7F8.text: 008EE7F8 loc_8EE7: 00: 00: 00: 00: 008EE7F8: mov ecx, esi.text: 008EE7FA og ecx, 1Fh.text: 008EE7FD mov edx, 1.text: 008EE802 shl edx, cl.text: 008EE804 mov ecx, esi.text: 008EE806 shr ecx, 5.text: 008EE809 add ecx, ecx.text: 008EE80B add ecx, ecx.text: 008EE80D test [esp + ecx + 54h + var_40], edx.text: 008EE811 setnz al .text: 008EE814 test al, al.text: 008EE816 jnz kort loc_8EE821.text: 008EE818 ikke edx.text: 008EE81A og [ecx + edi + 0C0h], edx.text: 008EE821.text: 008EE821 loc_8EE821: .text: 008EE821 esi, 1.text: 008EE824 cmp esi, 4.text: 008EE827 jb short loc_8EE7F8.text: 008EE829 mov esi, [esp + 54h + var_3C] .text: 008EE82D.text: 008EE82D loc_8EE82D: .text: 008EE82D add esi, 1 .text: 008EE830 cmp esi, dword_1667290.text: 008EE836 mov [esp + 54h + var_3C], esi.text: 008EE83A jb loc_8EE740.text: 008EE840
.text: 008EE840 loc_8EE840: .text: 008EE840 xor esi, esi.text: 008EE842 cmp [ebx + 79954h], ebp.text: 008EE848 jle short loc_8EE875.text: 008EE84A lea edi, [ebx + 108h] .text: 0088 tekst: 008EE850 loc_8EE850: .text: 008EE850 mov eax, [edi] .text: 008EE852 mov ecx, dword_16E9DC8.text: 008EE858 push eax; Str2.text: 008EE859 add ecx, 84h.text: 008EE85F call sub_10E86C0.text: 008EE864 add esi, 1.text: 008EE867 add edi, 3E4h.text: 008EE86D cmp esi, [ebx + 79954h] .text: 008EE873 jl kort loc_8 .text: 008EE875.text: 008EE875 loc_8EE875: .text: 008EE875 lea ecx, [esp + 54h + var_2C] .text: 008EE879 mov [esp + 54h + var_4], 0FFFFFFFFh.text: 008EE881 kald sub_D4BB30.text: 008EE886 mov ecx , [esp + 54h + var_C] .text: 008EE88A pop edi.text: 008EE88B pop esi.text: 008EE88C pop ebp.text: 008EE88D mov al, 1. tekst: 008EE88F pop ebx.text: 008EE890 mov store fs: 0, ecx.text: 008EE897 add esp, 44h.text: 008EE89A retn.text: 008EE89B.text: 008EE89B loc_8EE89B: .text: 008EE89B le en ecx, [esp + 54h + var_40] .text: 008EE89F jmp sub_8D0FE0.text: 008EE8A4.text: 008EE8A4 loc_8EE8A4: .text: 008EE8A4 lea ecx, [esp + 54h + var_40] .text: 008EE8A8 jmp sub_8D0FE.0 sub_8EE5D0 endp
Den, jeg gravede lidt mere for at finde ud af CFG_DB
-konstruktøren, som ser sådan ud (pseudokode fra IDA Pro):
ugyldigt __thiscall sub_8EEFC0 (ugyldigt * dette) {ugyldigt * v1 = dette; // esi @ 1
* (_ DWORD *) dette = &DATABASE_TABLE<CFG_ENTRY_500_unsigned_int> :: _ vftable_; sub_8EE500 ((int) dette); sub_8EC030 ((char *) v1 + 502036); hvis (* ((_ DWORD *) v1 + 124503)) operator sletter __ (* ((ugyldig **) v1 + 124503)); * ((_ DWORD *) v1 + 124503) = 0; unknown_libname_2673 ((char *) v1 + 4, 0x3E4u, 500, sub_8EEA00);}
Så det ser ud til, at "array" af CFG_ENTRY
bliver øjeblikkeligt kaldet en metode, der hører til et andet bibliotek, der er knyttet til den eksekverbare fil. Til sidst satte jeg et brudpunkt i begyndelsen af min ReadCfgFile
-metode for at se, om markører, der sendes til det, kan være til hjælp:
.text: 008F287A push esi == > esi = 00400000 [...] [...]. text: 008F2886 mov esi, ecx == > ecx = myapp.0190BD08
Og efter adressen 0190BD08
snuble jeg lige over dette:
.data: 0190BD08 unk_190BD08 db? ; ; DATA XREF: sub_40FFF0: loc_410049o.data: 0190BD08; sub_40FFF0: loc_410053o .... tekst: 00410049 loc_410049:; DATA XREF: .rdata: 01484034o.text: 00410049; .rdata: 0148489Co .... tekst: 00410049 mov ecx, offset unk_190BD08.text: 00410053.text: 00410053 loc_410053:; DATA XREF: .rdata: 01484078o.text: 00410053; .rdata: 01484C3Co .... tekst: 00410053 mov ecx, offset unk_190BD08
Det ser ud som en blindgyde for mig ...