由于多次跟蹤程序的時候碰到了,一直沒怎么理會,今天出于好奇,進去逛了下。。。很簡單,原來就是分配內存。

注釋寫的很清楚,而且很簡單,所以不多做解釋了。

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