原地址:http://blog.csdn.net/xuzhina/article/details/44056689
系统:windows xp sp3
崩溃的exe:insight3_en.exe
版本:3.50.0064
崩溃时的信息:
(4c64.4af4): Access violation - code c0000005 (!!! second chance !!!) eax=00000000 ebx=7ffd9000 ecx=00000000 edx=00000274 esi=0006d708 edi=0006ceb0 eip=004fdae2 esp=0006ce4c ebp=0006ce54 iopl=0 nv up ei pl nz ac po cy cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000213 *** ERROR: Module load completed but symbols could not be loaded for D:\Program Files\SourceInsight\Insight3_en.exe Insight3_en+0xfdae2: 004fdae2 8b00 mov eax,dword ptr [eax] ds:0023:00000000=????????
堆栈:
0:000> kb ChildEBP RetAddr Args to Child WARNING: Stack unwind information not available. Following frames may be wrong. 0006ce54 00500754 0006ce80 0006d6e8 00000001 Insight3_en+0xfdae2 0006cf28 00481841 0006eb48 0006cf78 0000000a Insight3_en+0x100754 0006f000 00481608 01a707e8 0006f020 00000001 Insight3_en+0x81841 0006fc20 0048149a 01a707e8 06809d58 00000001 Insight3_en+0x81608 0006fc38 00481456 01a707e8 00000001 01f86f50 Insight3_en+0x8149a 0006fc4c 004813c8 01a707e8 00000001 01f86f50 Insight3_en+0x81456 0006fc60 004812d5 01a707e8 00000001 01a707e8 Insight3_en+0x813c8 0006fc74 004421f4 00000001 00030000 00000001 Insight3_en+0x812d5 0006fee0 00440b1a 000000a0 000000a0 7c937d08 Insight3_en+0x421f4 0006ff34 00521ecb 00400000 00000000 00091f11 Insight3_en+0x40b1a *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\kernel32.dll - 0006ffc0 7c81776f 7c80e0e8 00000000 7ffd9000 Insight3_en+0x121ecb 0006fff0 00000000 00521dfd 00000000 78746341 kernel32!RegisterWaitForInputIdle+0x49
分析过程:
用IDA打开Insight3_en,看一下004fdae2附近的汇编:
.text:004FDAB5 rep movsd .text:004FDAB7 mov eax, [ebp+arg_0] .text:004FDABA mov dword ptr [eax+4], offset sub_4FDB2A .text:004FDAC1 mov eax, [ebp+arg_0] .text:004FDAC4 mov ecx, dword_5BD034 .text:004FDACA mov [eax+58h], ecx .text:004FDACD cmp dword_5BD034, 0FFFFFFFFh .text:004FDAD4 jz short loc_4FDB24 .text:004FDAD6 mov eax, dword_5BD034 .text:004FDADB mov eax, dword_5C6B80[eax*4] .text:004FDAE2 mov eax, [eax]
由上面可知,dword_5BD034和dword_5C6B80是全局变量,且dword_5C6B80是一个数组,且是指针数组,dword_5BD034存放着这个数组的index.
看一下这两个全局变量的内容:
0:000> dd 5C6B80 L 1 005c6b80 00000000 0:000> dd 5BD034 L 8 005bd034 00000000 00000035 00000001 00000400 005bd044 58584654 58585858 00000000 58584c43
可见,index为0,且这个数组的第一个元素为空指针。那么空指针是从哪里来的?
在IDA双击dword_5C6B80
.data:005C6B80 dword_5C6B80 dd ? ; DATA XREF: sub_441940+EAr .data:005C6B80 ; sub_441940+262r ...
按下面操作
http://img.blog.csdn.net/20150304103510006?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHV6aGluYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
打开引用这个全局变量的代码位置列表,在这个列表,找出改变这个全局变量的地方(幸好只有一处)
http://img.blog.csdn.net/20150304103629223?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHV6aGluYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
并跳转过去。
看一下这附近的汇编:
.text:004E8B3C loc_4E8B3C: ; CODE XREF: sub_4E8AD3+50j .text:004E8B3C push 3D8h ; Size .text:004E8B41 call sub_420BBC .text:004E8B46 mov [ebp+var_C], eax .text:004E8B49 cmp [ebp+var_C], 0 .text:004E8B4D jnz short loc_4E8B54 .text:004E8B4F or eax, 0FFFFFFFFh .text:004E8B52 jmp short loc_4E8B95 .text:004E8B54 ; --------------------------------------------------------------------------- .text:004E8B54 .text:004E8B54 loc_4E8B54: ; CODE XREF: sub_4E8AD3+7Aj .text:004E8B54 mov eax, [ebp+var_4] .text:004E8B57 mov ecx, [ebp+var_C] .text:004E8B5A mov dword_5C6B80[eax*4], ecx
看一下红色那一块,显然,dword_5C6B80里面的元素在读取时不可能为空指针,除非这两种情况发生:
1.004E8B5A 比崩溃地址004FDAE2晚执行。因为,如果004E8B5A晚执行,那么dword_5C6B80的值会保持默认值,即所有元素的值为空。
2.dword_5C6B80前面的地址被其它代码修改时,越界了,把dword_5C6B80的内容给覆盖了。
究竟是哪一种原因导致的呢?
看一下dword_5C6B80的上一个全局变量是哪个地址:
.data:005C6900 unk_5C6900 db ? ; ; DATA XREF: sub_485375+6A3o .data:005C6901 db ? ; .data:005C6902 db ? ; .data:005C6903 db ? ; .data:005C6904 db ? ; .data:005C6905 db ? ; .data:005C6906 db ? ; .data:005C6907 db ? ; .data:005C6908 db ? ; .data:005C6909 db ? ; .data:005C690A db ? ; .data:005C690B db ? ; .data:005C690C db ? ; .data:005C690D db ? ; .data:005C690E db ? ; .data:005C690F db ? ; .data:005C6910 db ? ; .data:005C6911 db ? ; .data:005C6912 db ? ; .data:005C6913 db ? ; .data:005C6914 db ? ; .data:005C6915 db ? ; .data:005C6916 db ? ; .data:005C6917 db ? ; .data:005C6918 db ? ; .data:005C6919 db ? ; .data:005C691A db ? ; .data:005C691B db ? ; .data:005C691C db ? ; .data:005C691D db ? ; .data:005C691E db ? ; .data:005C691F db ? ; .data:005C6920 db ? ; .data:005C6921 db ? ; .data:005C6922 db ? ; .data:005C6923 db ? ; .data:005C6924 db ? ; .data:005C6925 db ? ; .data:005C6926 db ? ; .data:005C6927 db ? ; .data:005C6928 db ? ; .data:005C6929 db ? ; .data:005C692A db ? ; .data:005C692B db ? ; .data:005C692C db ? ; .data:005C692D db ? ; .data:005C692E db ? ; .data:005C692F db ? ; .data:005C6930 db ? ; .data:005C6931 db ? ; .data:005C6932 db ? ; .data:005C6933 db ? ; .data:005C6934 db ? ; .data:005C6935 db ? ; .data:005C6936 db ? ; .data:005C6937 db ? ; .data:005C6938 db ? ; .data:005C6939 db ? ; .data:005C693A db ? ; .data:005C693B db ? ; .data:005C693C db ? ; .data:005C693D db ? ; .data:005C693E db ? ; .data:005C693F db ? ; .data:005C6940 db ? ; .data:005C6941 db ? ; .data:005C6942 db ? ; .data:005C6943 db ? ; .data:005C6944 db ? ; .data:005C6945 db ? ; .data:005C6946 db ? ; .data:005C6947 db ? ; .data:005C6948 db ? ; .data:005C6949 db ? ; .data:005C694A db ? ; .data:005C694B db ? ; .data:005C694C db ? ; .data:005C694D db ? ; .data:005C694E db ? ; .data:005C694F db ? ; .data:005C6950 db ? ; .data:005C6951 db ? ; .data:005C6952 db ? ; .data:005C6953 db ? ; .data:005C6954 db ? ; .data:005C6955 db ? ; .data:005C6956 db ? ; .data:005C6957 db ? ; .data:005C6958 db ? ; .data:005C6959 db ? ; .data:005C695A db ? ; .data:005C695B db ? ; .data:005C695C db ? ; .data:005C695D db ? ; .data:005C695E db ? ; .data:005C695F db ? ; .data:005C6960 db ? ; .data:005C6961 db ? ; .data:005C6962 db ? ; .data:005C6963 db ? ; .data:005C6964 db ? ; .data:005C6965 db ? ; .data:005C6966 db ? ; .data:005C6967 db ? ; .data:005C6968 db ? ; .data:005C6969 db ? ; .data:005C696A db ? ; .data:005C696B db ? ; .data:005C696C db ? ; .data:005C696D db ? ; .data:005C696E db ? ; .data:005C696F db ? ; .data:005C6970 db ? ; .data:005C6971 db ? ; .data:005C6972 db ? ; .data:005C6973 db ? ; .data:005C6974 db ? ; .data:005C6975 db ? ; .data:005C6976 db ? ; .data:005C6977 db ? ; .data:005C6978 db ? ; .data:005C6979 db ? ; .data:005C697A db ? ; .data:005C697B db ? ; .data:005C697C db ? ; .data:005C697D db ? ; .data:005C697E db ? ; .data:005C697F db ? ; .data:005C6980 db ? ; .data:005C6981 db ? ; .data:005C6982 db ? ; .data:005C6983 db ? ; .data:005C6984 db ? ; .data:005C6985 db ? ; .data:005C6986 db ? ; .data:005C6987 db ? ; .data:005C6988 db ? ; .data:005C6989 db ? ; .data:005C698A db ? ; .data:005C698B db ? ; .data:005C698C db ? ; .data:005C698D db ? ; .data:005C698E db ? ; .data:005C698F db ? ; .data:005C6990 db ? ; .data:005C6991 db ? ; .data:005C6992 db ? ; .data:005C6993 db ? ; .data:005C6994 db ? ; .data:005C6995 db ? ; .data:005C6996 db ? ; .data:005C6997 db ? ; .data:005C6998 db ? ; .data:005C6999 db ? ; .data:005C699A db ? ; .data:005C699B db ? ; .data:005C699C db ? ; .data:005C699D db ? ; .data:005C699E db ? ; .data:005C699F db ? ; .data:005C69A0 db ? ; .data:005C69A1 db ? ; .data:005C69A2 db ? ; .data:005C69A3 db ? ; .data:005C69A4 db ? ; .data:005C69A5 db ? ; .data:005C69A6 db ? ; .data:005C69A7 db ? ; .data:005C69A8 db ? ; .data:005C69A9 db ? ; .data:005C69AA db ? ; .data:005C69AB db ? ; .data:005C69AC db ? ; .data:005C69AD db ? ; .data:005C69AE db ? ; .data:005C69AF db ? ; .data:005C69B0 db ? ; .data:005C69B1 db ? ; .data:005C69B2 db ? ; .data:005C69B3 db ? ; .data:005C69B4 db ? ; .data:005C69B5 db ? ; .data:005C69B6 db ? ; .data:005C69B7 db ? ; .data:005C69B8 db ? ; .data:005C69B9 db ? ; .data:005C69BA db ? ; .data:005C69BB db ? ; .data:005C69BC db ? ; .data:005C69BD db ? ; .data:005C69BE db ? ; .data:005C69BF db ? ; .data:005C69C0 db ? ; .data:005C69C1 db ? ; .data:005C69C2 db ? ; .data:005C69C3 db ? ; .data:005C69C4 db ? ; .data:005C69C5 db ? ; .data:005C69C6 db ? ; .data:005C69C7 db ? ; .data:005C69C8 db ? ; .data:005C69C9 db ? ; .data:005C69CA db ? ; .data:005C69CB db ? ; .data:005C69CC db ? ; .data:005C69CD db ? ; .data:005C69CE db ? ; .data:005C69CF db ? ; .data:005C69D0 db ? ; .data:005C69D1 db ? ; .data:005C69D2 db ? ; .data:005C69D3 db ? ; .data:005C69D4 db ? ; .data:005C69D5 db ? ; .data:005C69D6 db ? ; .data:005C69D7 db ? ; .data:005C69D8 db ? ; .data:005C69D9 db ? ; .data:005C69DA db ? ; .data:005C69DB db ? ; .data:005C69DC db ? ; .data:005C69DD db ? ; .data:005C69DE db ? ; .data:005C69DF db ? ; .data:005C69E0 db ? ; .data:005C69E1 db ? ; .data:005C69E2 db ? ; .data:005C69E3 db ? ; .data:005C69E4 db ? ; .data:005C69E5 db ? ; .data:005C69E6 db ? ; .data:005C69E7 db ? ; .data:005C69E8 db ? ; .data:005C69E9 db ? ; .data:005C69EA db ? ; .data:005C69EB db ? ; .data:005C69EC db ? ; .data:005C69ED db ? ; .data:005C69EE db ? ; .data:005C69EF db ? ; .data:005C69F0 db ? ; .data:005C69F1 db ? ; .data:005C69F2 db ? ; .data:005C69F3 db ? ; .data:005C69F4 db ? ; .data:005C69F5 db ? ; .data:005C69F6 db ? ; .data:005C69F7 db ? ; .data:005C69F8 db ? ; .data:005C69F9 db ? ; .data:005C69FA db ? ; .data:005C69FB db ? ; .data:005C69FC db ? ; .data:005C69FD db ? ; .data:005C69FE db ? ; .data:005C69FF db ? ; .data:005C6A00 db ? ; .data:005C6A01 db ? ; .data:005C6A02 db ? ; .data:005C6A03 db ? ; .data:005C6A04 db ? ; .data:005C6A05 db ? ; .data:005C6A06 db ? ; .data:005C6A07 db ? ; .data:005C6A08 db ? ; .data:005C6A09 db ? ; .data:005C6A0A db ? ; .data:005C6A0B db ? ; .data:005C6A0C db ? ; .data:005C6A0D db ? ; .data:005C6A0E db ? ; .data:005C6A0F db ? ; .data:005C6A10 db ? ; .data:005C6A11 db ? ; .data:005C6A12 db ? ; .data:005C6A13 db ? ; .data:005C6A14 db ? ; .data:005C6A15 db ? ; .data:005C6A16 db ? ; .data:005C6A17 db ? ; .data:005C6A18 db ? ; .data:005C6A19 db ? ; .data:005C6A1A db ? ; .data:005C6A1B db ? ; .data:005C6A1C db ? ; .data:005C6A1D db ? ; .data:005C6A1E db ? ; .data:005C6A1F db ? ; .data:005C6A20 db ? ; .data:005C6A21 db ? ; .data:005C6A22 db ? ; .data:005C6A23 db ? ; .data:005C6A24 db ? ; .data:005C6A25 db ? ; .data:005C6A26 db ? ; .data:005C6A27 db ? ; .data:005C6A28 db ? ; .data:005C6A29 db ? ; .data:005C6A2A db ? ; .data:005C6A2B db ? ; .data:005C6A2C db ? ; .data:005C6A2D db ? ; .data:005C6A2E db ? ; .data:005C6A2F db ? ; .data:005C6A30 db ? ; .data:005C6A31 db ? ; .data:005C6A32 db ? ; .data:005C6A33 db ? ; .data:005C6A34 db ? ; .data:005C6A35 db ? ; .data:005C6A36 db ? ; .data:005C6A37 db ? ; .data:005C6A38 db ? ; .data:005C6A39 db ? ; .data:005C6A3A db ? ; .data:005C6A3B db ? ; .data:005C6A3C db ? ; .data:005C6A3D db ? ; .data:005C6A3E db ? ; .data:005C6A3F db ? ; .data:005C6A40 db ? ; .data:005C6A41 db ? ; .data:005C6A42 db ? ; .data:005C6A43 db ? ; .data:005C6A44 db ? ; .data:005C6A45 db ? ; .data:005C6A46 db ? ; .data:005C6A47 db ? ; .data:005C6A48 db ? ; .data:005C6A49 db ? ; .data:005C6A4A db ? ; .data:005C6A4B db ? ; .data:005C6A4C db ? ; .data:005C6A4D db ? ; .data:005C6A4E db ? ; .data:005C6A4F db ? ; .data:005C6A50 db ? ; .data:005C6A51 db ? ; .data:005C6A52 db ? ; .data:005C6A53 db ? ; .data:005C6A54 db ? ; .data:005C6A55 db ? ; .data:005C6A56 db ? ; .data:005C6A57 db ? ; .data:005C6A58 db ? ; .data:005C6A59 db ? ; .data:005C6A5A db ? ; .data:005C6A5B db ? ; .data:005C6A5C db ? ; .data:005C6A5D db ? ; .data:005C6A5E db ? ; .data:005C6A5F db ? ; .data:005C6A60 db ? ; .data:005C6A61 db ? ; .data:005C6A62 db ? ; .data:005C6A63 db ? ; .data:005C6A64 db ? ; .data:005C6A65 db ? ; .data:005C6A66 db ? ; .data:005C6A67 db ? ; .data:005C6A68 db ? ; .data:005C6A69 db ? ; .data:005C6A6A db ? ; .data:005C6A6B db ? ; .data:005C6A6C db ? ; .data:005C6A6D db ? ; .data:005C6A6E db ? ; .data:005C6A6F db ? ; .data:005C6A70 db ? ; .data:005C6A71 db ? ; .data:005C6A72 db ? ; .data:005C6A73 db ? ; .data:005C6A74 db ? ; .data:005C6A75 db ? ; .data:005C6A76 db ? ; .data:005C6A77 db ? ; .data:005C6A78 db ? ; .data:005C6A79 db ? ; .data:005C6A7A db ? ; .data:005C6A7B db ? ; .data:005C6A7C db ? ; .data:005C6A7D db ? ; .data:005C6A7E db ? ; .data:005C6A7F db ? ; .data:005C6A80 db ? ; .data:005C6A81 db ? ; .data:005C6A82 db ? ; .data:005C6A83 db ? ; .data:005C6A84 db ? ; .data:005C6A85 db ? ; .data:005C6A86 db ? ; .data:005C6A87 db ? ; .data:005C6A88 db ? ; .data:005C6A89 db ? ; .data:005C6A8A db ? ; .data:005C6A8B db ? ; .data:005C6A8C db ? ; .data:005C6A8D db ? ; .data:005C6A8E db ? ; .data:005C6A8F db ? ; .data:005C6A90 db ? ; .data:005C6A91 db ? ; .data:005C6A92 db ? ; .data:005C6A93 db ? ; .data:005C6A94 db ? ; .data:005C6A95 db ? ; .data:005C6A96 db ? ; .data:005C6A97 db ? ; .data:005C6A98 db ? ; .data:005C6A99 db ? ; .data:005C6A9A db ? ; .data:005C6A9B db ? ; .data:005C6A9C db ? ; .data:005C6A9D db ? ; .data:005C6A9E db ? ; .data:005C6A9F db ? ; .data:005C6AA0 db ? ; .data:005C6AA1 db ? ; .data:005C6AA2 db ? ; .data:005C6AA3 db ? ; .data:005C6AA4 db ? ; .data:005C6AA5 db ? ; .data:005C6AA6 db ? ; .data:005C6AA7 db ? ; .data:005C6AA8 db ? ; .data:005C6AA9 db ? ; .data:005C6AAA db ? ; .data:005C6AAB db ? ; .data:005C6AAC db ? ; .data:005C6AAD db ? ; .data:005C6AAE db ? ; .data:005C6AAF db ? ; .data:005C6AB0 db ? ; .data:005C6AB1 db ? ; .data:005C6AB2 db ? ; .data:005C6AB3 db ? ; .data:005C6AB4 db ? ; .data:005C6AB5 db ? ; .data:005C6AB6 db ? ; .data:005C6AB7 db ? ; .data:005C6AB8 db ? ; .data:005C6AB9 db ? ; .data:005C6ABA db ? ; .data:005C6ABB db ? ; .data:005C6ABC db ? ; .data:005C6ABD db ? ; .data:005C6ABE db ? ; .data:005C6ABF db ? ; .data:005C6AC0 db ? ; .data:005C6AC1 db ? ; .data:005C6AC2 db ? ; .data:005C6AC3 db ? ; .data:005C6AC4 db ? ; .data:005C6AC5 db ? ; .data:005C6AC6 db ? ; .data:005C6AC7 db ? ; .data:005C6AC8 db ? ; .data:005C6AC9 db ? ; .data:005C6ACA db ? ; .data:005C6ACB db ? ; .data:005C6ACC db ? ; .data:005C6ACD db ? ; .data:005C6ACE db ? ; .data:005C6ACF db ? ; .data:005C6AD0 db ? ; .data:005C6AD1 db ? ; .data:005C6AD2 db ? ; .data:005C6AD3 db ? ; .data:005C6AD4 db ? ; .data:005C6AD5 db ? ; .data:005C6AD6 db ? ; .data:005C6AD7 db ? ; .data:005C6AD8 db ? ; .data:005C6AD9 db ? ; .data:005C6ADA db ? ; .data:005C6ADB db ? ; .data:005C6ADC db ? ; .data:005C6ADD db ? ; .data:005C6ADE db ? ; .data:005C6ADF db ? ; .data:005C6AE0 db ? ; .data:005C6AE1 db ? ; .data:005C6AE2 db ? ; .data:005C6AE3 db ? ; .data:005C6AE4 db ? ; .data:005C6AE5 db ? ; .data:005C6AE6 db ? ; .data:005C6AE7 db ? ; .data:005C6AE8 db ? ; .data:005C6AE9 db ? ; .data:005C6AEA db ? ; .data:005C6AEB db ? ; .data:005C6AEC db ? ; .data:005C6AED db ? ; .data:005C6AEE db ? ; .data:005C6AEF db ? ; .data:005C6AF0 db ? ; .data:005C6AF1 db ? ; .data:005C6AF2 db ? ; .data:005C6AF3 db ? ; .data:005C6AF4 db ? ; .data:005C6AF5 db ? ; .data:005C6AF6 db ? ; .data:005C6AF7 db ? ; .data:005C6AF8 db ? ; .data:005C6AF9 db ? ; .data:005C6AFA db ? ; .data:005C6AFB db ? ; .data:005C6AFC db ? ; .data:005C6AFD db ? ; .data:005C6AFE db ? ; .data:005C6AFF db ? ; .data:005C6B00 db ? ; .data:005C6B01 db ? ; .data:005C6B02 db ? ; .data:005C6B03 db ? ; .data:005C6B04 db ? ; .data:005C6B05 db ? ; .data:005C6B06 db ? ; .data:005C6B07 db ? ; .data:005C6B08 db ? ; .data:005C6B09 db ? ; .data:005C6B0A db ? ; .data:005C6B0B db ? ; .data:005C6B0C db ? ; .data:005C6B0D db ? ; .data:005C6B0E db ? ; .data:005C6B0F db ? ; .data:005C6B10 db ? ; .data:005C6B11 db ? ; .data:005C6B12 db ? ; .data:005C6B13 db ? ; .data:005C6B14 db ? ; .data:005C6B15 db ? ; .data:005C6B16 db ? ; .data:005C6B17 db ? ; .data:005C6B18 db ? ; .data:005C6B19 db ? ; .data:005C6B1A db ? ; .data:005C6B1B db ? ; .data:005C6B1C db ? ; .data:005C6B1D db ? ; .data:005C6B1E db ? ; .data:005C6B1F db ? ; .data:005C6B20 db ? ; .data:005C6B21 db ? ; .data:005C6B22 db ? ; .data:005C6B23 db ? ; .data:005C6B24 db ? ; .data:005C6B25 db ? ; .data:005C6B26 db ? ; .data:005C6B27 db ? ; .data:005C6B28 db ? ; .data:005C6B29 db ? ; .data:005C6B2A db ? ; .data:005C6B2B db ? ; .data:005C6B2C db ? ; .data:005C6B2D db ? ; .data:005C6B2E db ? ; .data:005C6B2F db ? ; .data:005C6B30 db ? ; .data:005C6B31 db ? ; .data:005C6B32 db ? ; .data:005C6B33 db ? ; .data:005C6B34 db ? ; .data:005C6B35 db ? ; .data:005C6B36 db ? ; .data:005C6B37 db ? ; .data:005C6B38 db ? ; .data:005C6B39 db ? ; .data:005C6B3A db ? ; .data:005C6B3B db ? ; .data:005C6B3C db ? ; .data:005C6B3D db ? ; .data:005C6B3E db ? ; .data:005C6B3F db ? ; .data:005C6B40 db ? ; .data:005C6B41 db ? ; .data:005C6B42 db ? ; .data:005C6B43 db ? ; .data:005C6B44 db ? ; .data:005C6B45 db ? ; .data:005C6B46 db ? ; .data:005C6B47 db ? ; .data:005C6B48 db ? ; .data:005C6B49 db ? ; .data:005C6B4A db ? ; .data:005C6B4B db ? ; .data:005C6B4C db ? ; .data:005C6B4D db ? ; .data:005C6B4E db ? ; .data:005C6B4F db ? ; .data:005C6B50 db ? ; .data:005C6B51 db ? ; .data:005C6B52 db ? ; .data:005C6B53 db ? ; .data:005C6B54 db ? ; .data:005C6B55 db ? ; .data:005C6B56 db ? ; .data:005C6B57 db ? ; .data:005C6B58 db ? ; .data:005C6B59 db ? ; .data:005C6B5A db ? ; .data:005C6B5B db ? ; .data:005C6B5C db ? ; .data:005C6B5D db ? ; .data:005C6B5E db ? ; .data:005C6B5F db ? ; .data:005C6B60 db ? ; .data:005C6B61 db ? ; .data:005C6B62 db ? ; .data:005C6B63 db ? ; .data:005C6B64 db ? ; .data:005C6B65 db ? ; .data:005C6B66 db ? ; .data:005C6B67 db ? ; .data:005C6B68 db ? ; .data:005C6B69 db ? ; .data:005C6B6A db ? ; .data:005C6B6B db ? ; .data:005C6B6C db ? ; .data:005C6B6D db ? ; .data:005C6B6E db ? ; .data:005C6B6F db ? ; .data:005C6B70 db ? ; .data:005C6B71 db ? ; .data:005C6B72 db ? ; .data:005C6B73 db ? ; .data:005C6B74 db ? ; .data:005C6B75 db ? ; .data:005C6B76 db ? ; .data:005C6B77 db ? ; .data:005C6B78 db ? ; .data:005C6B79 db ? ; .data:005C6B7A db ? ; .data:005C6B7B db ? ; .data:005C6B7C db ? ; .data:005C6B7D db ? ; .data:005C6B7E db ? ; .data:005C6B7F db ? ; .data:005C6B80 dword_5C6B80 dd ? ; DATA XREF: sub_441940+EAr .data:005C6B80 ; sub_441940+262r ... .data:005C6B84 db ? ; 可知是unk_5C6900,看一下unk_5C6900被哪段汇编代码引用了。用上面查找的方式可以找到,唯一被引用的地方是00485A18
看一下这附近的汇编:
.text:00485A18 push offset unk_5C6900 .text:00485A1D call sub_488A15
看一下sub_488A15,并记得unk_5C6900是它的第一个参数:
.text:00488A15 sub_488A15 proc near ; CODE XREF: sub_485375+6A8p .text:00488A15 ; sub_485CD1+2A9p .text:00488A15 .text:00488A15 arg_0 = dword ptr 8 .text:00488A15 .text:00488A15 push ebp .text:00488A16 mov ebp, esp .text:00488A18 push esi .text:00488A19 push edi .text:00488A1A mov ecx, 9Ch .text:00488A1F xor eax, eax .text:00488A21 mov edi, [ebp+arg_0] .text:00488A24 rep stosd .text:00488A26 mov eax, [ebp+arg_0] .text:00488A29 mov ecx, dword_5EAE2C
上面红色的汇编就是memset的内联优化,算一下,5C6900+9C*4 = 5C6B70(因为是stosd,说明是四个字节).和5C6B80相差较远。继续分析sub_488A15,也是发现它并没有越界。
只可能是第一种情况。
定位完毕。
对这个问题的建议是:
1.对使用dword_5C6B80里面的元素,需要进行判空操作,不能够直接引用。
2.如果source insight是由C++写成的,应该使用单实例类来代替dword_5C6B80,这样可以更好保证数据在使用前已经初始化了。
|