由于多次跟踪程序的时候碰到了,一直没怎么理会,今天出于好奇,进去逛了下。。。很简单,原来就是分配内存。

注释写的很清楚,而且很简单,所以不多做解释了。

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