如下代码:
.text:00439B99 mov ecx, [ebp+8]
...
.text:00439B9F lea eax, [ebp+0Ch] ; [ebp+0ch]是一个字符串地址
.text:00439BA2 push eax
.text:00439BA3 call sub_4026A0 ; 调用程序见下
.text:00439BA8 jmp short loc_439BB2
------------------------------------------------------------------------------------------
.text:004026A0 sub_4026A0 proc near ; CODE XREF: sub_405030+306p
.text:004026A0
.text:004026A0 arg_0 = dword ptr 4
.text:004026A0
.text:004026A0 mov eax, [esp+arg_0]
.text:004026A4 mov eax, [eax]
.text:004026A6 push esi
.text:004026A7 sub eax, 10h ;字符串地址偏移10个字节 <***
.text:004026AA push eax
.text:004026AB mov esi, ecx
.text:004026AD call sub_402640 ;调用程序见下
.text:004026AD
.text:004026B2 add eax, 10h
.text:004026B5 mov [esi], eax
.text:004026B7 add esp, 4
.text:004026BA mov eax, esi
.text:004026BC pop esi
.text:004026BD retn 4
.text:004026BD
.text:004026BD sub_4026A0 endp ; sp = 4
------------------------------------------------------------------------------------------
.text:00402640 sub_402640 proc near ; CODE XREF: sub_4026A0+Dp
.text:00402640
.text:00402640 arg_0 = dword ptr 8
.text:00402640
.text:00402640 push esi
.text:00402641 mov esi, [esp+arg_0] ;上面传来的 : 字符串地址偏移10个字节处的数据
.text:00402645 mov ecx, [esi] ;
.text:00402647 mov eax, [ecx]
.text:00402649 call dword ptr [eax+10h] ;调用虚函数
.text:0040264C mov edx, [esi+0Ch]
.text:0040264F test edx, edx
.text:00402651 lea ecx, [esi+0Ch]
.text:00402654 jl short loc_402667
.text:00402654
.text:00402656 cmp eax, [esi]
.text:00402658 jnz short loc_402667
.text:00402658
.text:0040265A mov eax, esi
.text:0040265C mov edx, 1
.text:00402661 lock xadd [ecx], edx
.text:00402665 pop esi
.text:00402666 retn
...
这是一个VC7.0的程序,在操作字符串时,经常先将其地址偏移10h个字节,然后作为参数再调用一个虚函数,不知在源码中这是一个什么样类型的字符串数据?
字符串地址偏移10h字节处是一个什么数据?从代码上看,好像是一个类对象的地址的地址,双指针?
请高手指点指点...谢谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)