00401100 /$ 8BFF mov edi, edi <--- malloc()
00401102 |. 55 push ebp
00401103 |. 8BEC mov ebp, esp
00401105 |. 56 push esi
00401106 |. 8B75 08 mov esi, dword ptr [ebp+8]
00401109 |. 83FE E0 cmp esi, -20
0040110C |. 0F87 A1000000 ja 004011B3
00401112 |. 53 push ebx
00401113 |. 57 push edi
00401114 |. 8B3D 08804000 mov edi, dword ptr [<&KERNEL32.HeapAlloc>] <--- edi = ntdll.RtlAllocateHeap
0040111A |> 833D 6CAC4000 00 /cmp dword ptr [40AC6C], 0
00401121 |. 75 18 |jnz short 0040113B
00401123 |. E8 F7150000 |call 0040271F
00401128 |. 6A 1E |push 1E
0040112A |. E8 45140000 |call 00402574
0040112F |. 68 FF000000 |push 0FF
00401134 |. E8 87110000 |call 004022C0
00401139 |. 59 |pop ecx
0040113A |. 59 |pop ecx
0040113B |> A1 F4B74000 |mov eax, dword ptr [40B7F4]
00401140 |. 83F8 01 |cmp eax, 1
00401143 |. 75 0E |jnz short 00401153
00401145 |. 85F6 |test esi, esi
00401147 |. 74 04 |je short 0040114D
00401149 |. 8BC6 |mov eax, esi
0040114B |. EB 03 |jmp short 00401150
0040114D |> 33C0 |xor eax, eax
0040114F |. 40 |inc eax
00401150 |> 50 |push eax
00401151 |. EB 1C |jmp short 0040116F
00401153 |> 83F8 03 |cmp eax, 3
00401156 |. 75 0B |jnz short 00401163
00401158 |. 56 |push esi
00401159 |. E8 53FFFFFF |call 004010B1
0040115E |. 59 |pop ecx
0040115F |. 85C0 |test eax, eax
00401161 |. 75 16 |jnz short 00401179
00401163 |> 85F6 |test esi, esi
00401165 |. 75 01 |jnz short 00401168
00401167 |. 46 |inc esi
00401168 |> 83C6 0F |add esi, 0F
0040116B |. 83E6 F0 |and esi, FFFFFFF0
0040116E |. 56 |push esi
0040116F |> 6A 00 |push 0
00401171 |. FF35 6CAC4000 |push dword ptr [40AC6C]
00401177 |. FFD7 |call edi <--- 调用 ntdll.RtlAllocateHeap()
00401179 |> 8BD8 |mov ebx, eax
0040117B |. 85DB |test ebx, ebx
0040117D |. 75 2E |jnz short 004011AD
0040117F |. 6A 0C |push 0C
00401181 |. 5E |pop esi
00401182 |. 3905 10B14000 |cmp dword ptr [40B110], eax
00401188 |. 74 15 |je short 0040119F
0040118A |. FF75 08 |push dword ptr [ebp+8] ; /Arg1
0040118D |. E8 D5150000 |call 00402767 ; \x.00402767
00401192 |. 59 |pop ecx
00401193 |. 85C0 |test eax, eax
00401195 |. 74 0F |je short 004011A6
00401197 |. 8B75 08 |mov esi, dword ptr [ebp+8]
0040119A |.^ E9 7BFFFFFF \jmp 0040111A
0040119F |> E8 ED010000 call 00401391
004011A4 |. 8930 mov dword ptr [eax], esi
004011A6 |> E8 E6010000 call 00401391
004011AB |. 8930 mov dword ptr [eax], esi
004011AD |> 5F pop edi
004011AE |. 8BC3 mov eax, ebx
004011B0 |. 5B pop ebx
004011B1 |. EB 14 jmp short 004011C7
004011B3 |> 56 push esi ; /Arg1
004011B4 |. E8 AE150000 call 00402767 ; \x.00402767
004011B9 |. 59 pop ecx
004011BA |. E8 D2010000 call 00401391
004011BF |. C700 0C000000 mov dword ptr [eax], 0C
004011C5 |. 33C0 xor eax, eax
004011C7 |> 5E pop esi
004011C8 |. 5D pop ebp
004011C9 \. C3 retn
这是 VC9 的 malloc() 函数的反汇编,可以看出,它依托的是 ntdll.RtlAllocateHeap() |