我不是 StackExchange 的新手,但我对逆向工程很陌生,所以请耐心等待!:P
目前我正在处理一个可执行文件,我想稍微修改一下,供个人使用;该应用程序的源代码不可用,所以我只能修改它或尝试死。我同时使用 IDA Pro 6.1 和 OllyDBG 2.0 作为工具。
确切的说,我只是想增加CFG_ENTRY的应用程序可以读取量500
到1000
的方法ReadCfgFile
其中,显然,在编译时预分配静态存储区:
.text:008F2860 ReadCfgFile proc near ; 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 push edi
.text:008F287C mov edi, [esp+30h+arg_0]
.text:008F2880 mov eax, [edi+10h]
.text:008F2883 cmp eax, [edi+8]
.text: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:008F2896 cmp eax, 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
.text:008F28F5 jz short 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, [esi+79954h]
.text: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 large 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
.text:008F2953 mov esi, eax
.text:008F2955 call sub_D4D270
.text:008F295A push eax ; ArgList
.text:008F295B push offset aErrMsg_1 ; Error Message
.text:008F2960 call sub_D386E0
.text:008F2965 add esp, 8
.text:008F2968 call sub_D388C0
.text:008F296D lea edx, [esp+30h+var_20]
.text:008F2971 push edx
.text: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 call 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:008F299E mov ecx, edi
.text:008F29A0 mov esi, eax
.text:008F29A2 call sub_D4D270
.text:008F29A7 push eax
.text:008F29A8 push ebp ; ArgList
.text:008F29A9 push offset aErrMsg_2 ; Error Message
.text:008F29AE call sub_D386E0
.text:008F29B3 add esp, 0Ch
.text:008F29B6 call 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 short loc_8F2A27
.text:008F29DF
.text:008F29DF loc_8F29DF:
.text:008F29DF push 0
.text:008F29E1 call sub_D386E0
.text:008F29E6 add esp, 4
.text:008F29E9 mov ecx, edi
.text:008F29EB mov esi, eax
.text:008F29ED call sub_D4D270
.text:008F29F2 push eax ; ArgList
.text:008F29F3 push offset aErrMsg_0 ; Error Message
.text:008F29F8 call sub_D386E0
.text:008F29FD add esp, 8
.text:008F2A00 call sub_D388C0
.text:008F2A05 lea ecx, [esp+30h+var_20]
.text:008F2A09 push ecx
.text:008F2A0A lea ecx, [esp+34h+var_18]
.text:008F2A0E mov [esp+34h+var_20], eax
.text:008F2A12 mov [esp+34h+var_1C], 640h
.text:008F2A1A call 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 short loc_8F2A3A
.text:008F2A2F push esi
.text:008F2A30 push eax
.text:008F2A31 call 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 *)
.text: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:008F2A50 pop 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
[编辑 1 - 从一开始我就应该知道的一切!]
在遵循@sealed ... 的答案的建议之后,我使用类检查器来检测虚拟函数表,并找到了完整的类描述符。嗯...实际上有两个类引用了我的目标方法,ReadCfgFile
并且在整个可执行文件中没有直接调用它:
.rdata:0137A1D4 ; class DATABASE_TABLE<CFG_ENTRY,500,unsigned 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,unsigned int> VF Table
.rdata:0137A1D8 ??_7?$DATABASE_TABLE@UCFG_ENTRY@@$0BPE@I@@6B@ dd offset sub_8EF0F0 ; 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 ; class CFG_DB: DATABASE_TABLE<CFG_ENTRY,500,unsigned 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_8EE8B0
.rdata:0137A208 dd offset ReadCfgFile
.rdata:0137A20C dd offset sub_8EE5D0
[编辑 2 - 冒险继续!耶!]
阅读@Guntram Blohm 的答案后,我进行了更多调查,以收集和分析他建议的数据。我做的第一件事是用 PEiD 分析可执行文件,这是我从中获得的信息:
Compiler: Microsoft Visual C++ 7.0 Method2 [Debug]
Entropy: 6.24 (Not Packed)
Linker Info: 7.10
当我在我的ReadCfgFile
方法上设置断点时,这是我从 OllyDBG 堆栈中得到的:
CPU Stack
Address Value ASCII Comments
0018B2C0 [008EE644 D�. ; RETURN to myapp.008EE644
并且008EE644
是以下方法的一小部分,据我所知,它查找配置文件并启动例程以读取它,但没有显式调用ReadCfgFile
(突出显示的偏移量):
.text:008EE5D0 sub_8EE5D0 proc near ; CODE 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
.text:008EE5D0 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
.text:008EE5DE mov large 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 call sub_D50170
.text:008EE61C lea ecx, [esp+4Ch+var_38] ; void *
.text:008EE620 mov byte ptr [esp+4Ch+var_4], 2
.text:008EE625 call sub_EFFE30
.text:008EE62A mov edx, [ebx]
.text:008EE62C mov ecx, ebx
.text:008EE62E mov [ebx+7A938h], ebp
.text:008EE634 call dword ptr [edx+4]
.text:008EE637 mov eax, [ebx]
.text:008EE639 push ebp
.text:008EE63A lea ecx, [esp+50h+var_2C]
.text:008EE63E push ecx
.text:008EE63F mov ecx, ebx
.text:008EE641 call dword ptr [eax+14h]
.text:008EE644 ; ---------------------------------------------------------------------------
.text:008EE644 test al, al ; HERE IS THE STACK REFERENCE
.text:008EE644 ; ---------------------------------------------------------------------------
.text:008EE646 jnz short loc_8EE66C
.text:008EE648 lea ecx, [esp+4Ch+var_2C]
.text:008EE64C mov [esp+4Ch+var_4], 0FFFFFFFFh
.text:008EE654 call 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 or 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], ebp
.text:008EE69C jle loc_8EE727
.text:008EE6A2 lea esi, [ebx+40h]
.text:008EE6A5 jmp short loc_8EE6B0
.text:008EE6A7 align 10h
.text:008EE6B0
.text:008EE6B0 loc_8EE6B0:
.text:008EE6B0 mov eax, [esi]
.text:008EE6B2 mov cx, [esi+92h]
.text:008EE6B9 lea eax, ds:1986644h[eax*2]
.text:008EE6C0 mov ax, [eax]
.text:008EE6C3 cmp ax, cx
.text:008EE6C6 jnb short loc_8EE6CA
.text:008EE6C8 mov eax, ecx
.text:008EE6CA
.text:008EE6CA loc_8EE6CA:
.text:008EE6CA mov ecx, [esi]
.text:008EE6CC mov word ptr dword_1986644[ecx*2], ax
.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 short loc_8EE6B0
.text:008EE727
.text:008EE727 loc_8EE727:
.text:008EE727 xor esi, esi
.text:008EE729 cmp dword_1667290, ebp
.text:008EE72F mov [esp+54h+var_3C], 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 short loc_8EE77F
.text:008EE76F test [edi-2Ch], ebp
.text:008EE772 jz short loc_8EE77F
.text:008EE774 test byte ptr [edi+3], 20h
.text:008EE778 jz short 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 short 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]
.text:008EE79D mov ecx, esi
.text:008EE79F and ecx, 1Fh
.text:008EE7A2 mov ebx, 1
.text:008EE7A7 shl ebx, cl
.text:008EE7A9 or [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_8EE783
.text:008EE7BA mov eax, [esp+54h+var_34]
.text:008EE7BE add eax, 1
.text:008EE7C1 add edi, 3E4h
.text:008EE7C7 cmp eax, [ebx+79954h]
.text:008EE7CD mov [esp+54h+var_34], eax
.text:008EE7D1 jl short 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, 4
.text:008EE7E4 cmp byte ptr [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_8EE7F8:
.text:008EE7F8 mov ecx, esi
.text:008EE7FA and 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 short loc_8EE821
.text:008EE818 not edx
.text:008EE81A and [ecx+edi+0C0h], edx
.text:008EE821
.text:008EE821 loc_8EE821:
.text:008EE821 add 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:008EE850
.text: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 short loc_8EE850
.text:008EE875
.text:008EE875 loc_8EE875:
.text:008EE875 lea ecx, [esp+54h+var_2C]
.text:008EE879 mov [esp+54h+var_4], 0FFFFFFFFh
.text:008EE881 call 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
.text:008EE88F pop ebx
.text:008EE890 mov large fs:0, ecx
.text:008EE897 add esp, 44h
.text:008EE89A retn
.text:008EE89B
.text:008EE89B loc_8EE89B:
.text:008EE89B lea 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_8D0FE0
.text:008EE8A8 sub_8EE5D0 endp
该,我挖了一点找到CFG_DB
构造函数,它看起来像这样(来自 IDA Pro 的伪代码):
void __thiscall sub_8EEFC0(void *this)
{
void *v1 = this; // esi@1
*(_DWORD *)this = &DATABASE_TABLE<CFG_ENTRY_500_unsigned_int>::_vftable_;
sub_8EE500((int)this);
sub_8EC030((char *)v1 + 502036);
if ( *((_DWORD *)v1 + 124503) )
operator delete__(*((void **)v1 + 124503));
*((_DWORD *)v1 + 124503) = 0;
unknown_libname_2673((char *)v1 + 4, 0x3E4u, 500, sub_8EEA00);
}
所以看起来“数组”CFG_ENTRY
正在被实例化,调用属于链接到可执行文件的另一个库的方法。最后,我在ReadCfgFile
方法的开头放置了一个断点,以查看传递给它的指针是否有任何帮助:
.text:008F287A push esi ==> esi = 00400000
[...] [...]
.text:008F2886 mov esi, ecx ==> ecx = myapp.0190BD08
按照地址,0190BD08
我偶然发现了这个:
.data:0190BD08 unk_190BD08 db ? ; ; DATA XREF: sub_40FFF0:loc_410049o
.data:0190BD08 ; sub_40FFF0:loc_410053o ...
.text:00410049 loc_410049: ; DATA XREF: .rdata:01484034o
.text:00410049 ; .rdata:0148489Co ...
.text:00410049 mov ecx, offset unk_190BD08
.text:00410053
.text:00410053 loc_410053: ; DATA XREF: .rdata:01484078o
.text:00410053 ; .rdata:01484C3Co ...
.text:00410053 mov ecx, offset unk_190BD08
这对我来说似乎是一个死胡同...