由于多次跟踪程序的时候碰到了,一直没怎么理会,今天出于好奇,进去逛了下。。。很简单,原来就是分配内存。
注释写的很清楚,而且很简单,所以不多做解释了。
6E26152C > 8BFF MOV EDI,EDI
6E26152E 55 PUSH EBP
6E26152F 8BEC MOV EBP,ESP
6E261531 53 PUSH EBX
6E261532 8B5D 08 MOV EBX,DWORD PTR SS:[EBP+8] ; EBX为第一个参数
6E261535 56 PUSH ESI
6E261536 57 PUSH EDI
6E261537 53 PUSH EBX
6E261538 83CF FF OR EDI,FFFFFFFF ; EDI=-1
6E26153B FF15 6C10256E CALL DWORD PTR DS:[<&msvcrt.malloc>] ; msvcrt.malloc
6E261541 8BF0 MOV ESI,EAX ; ESI保存内存指针
6E261543 83C4 04 ADD ESP,4 ; 堆栈平衡
6E261546 85F6 TEST ESI,ESI ; 判断分配是否成功
6E261548 0F84 9E1E0000 JE MFC42.6E2633EC ; 如果分配失败则跳转
6E26154E 5F POP EDI ; 从这里可以看出6E261537H地址处的PUSH为传参而不是寄存器保护
6E26154F 8BC6 MOV EAX,ESI ; 到了这里也就知道了MFC42.#823号函数主要就是分配内存的作用
6E261551 5E POP ESI
6E261552 5B POP EBX
6E261553 5D POP EBP
6E261554 C3 RETN