原地址: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=0006ceb0eip=004fdae2 esp=0006ce4c ebp=0006ce54 iopl=0 nv up ei pl nz ac po cycs=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.exeInsight3_en+0xfdae2:004fdae2 8b00 mov eax,dword ptr [eax] ds:0023:00000000=????????堆栈:
0:000> kbChildEBP RetAddr Args to Child WARNING: Stack unwind information not available. Following frames may be wrong.0006ce54 00500754 0006ce80 0006d6e8 00000001 Insight3_en+0xfdae20006cf28 00481841 0006eb48 0006cf78 0000000a Insight3_en+0x1007540006f000 00481608 01a707e8 0006f020 00000001 Insight3_en+0x818410006fc20 0048149a 01a707e8 06809d58 00000001 Insight3_en+0x816080006fc38 00481456 01a707e8 00000001 01f86f50 Insight3_en+0x8149a0006fc4c 004813c8 01a707e8 00000001 01f86f50 Insight3_en+0x814560006fc60 004812d5 01a707e8 00000001 01a707e8 Insight3_en+0x813c80006fc74 004421f4 00000001 00030000 00000001 Insight3_en+0x812d50006fee0 00440b1a 000000a0 000000a0 7c937d08 Insight3_en+0x421f40006ff34 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+0x121ecb0006fff0 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 1005c6b80 000000000:000> dd 5BD034 L 8005bd034 00000000 00000035 00000001 00000400005bd044 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,这样可以更好保证数据在使用前已经初始化了。