• malloc

_malloc

0037E8C0 8B FF                mov         edi,edi
0037E8C2 55 push ebp
0037E8C3 8B EC mov ebp,esp
0037E8C5 6A 00 push 0
0037E8C7 6A 00 push 0
0037E8C9 6A 01 push 1
0037E8CB 8B 45 08 mov eax,dword ptr [size]
0037E8CE 50 push eax
0037E8CF E8 CE 4D FB FF call __malloc_dbg (03336A2h)
0037E8D4 83 C4 10 add esp,10h
0037E8D7 5D pop ebp
0037E8D8 C3 ret

__malloc_dbg

0038C420 8B FF                mov         edi,edi
0038C422 55 push ebp
0038C423 8B EC mov ebp,esp
0038C425 8B 45 14 mov eax,dword ptr [line_number]
0038C428 50 push eax
0038C429 8B 4D 10 mov ecx,dword ptr [file_name]
0038C42C 51 push ecx
0038C42D 8B 55 0C mov edx,dword ptr [block_use]
0038C430 52 push edx
0038C431 8B 45 08 mov eax,dword ptr [size]
0038C434 50 push eax
0038C435 E8 36 CF FF FF call heap_alloc_dbg (0389370h)
0038C43A 83 C4 10 add esp,10h
0038C43D 5D pop ebp
0038C43E C3 ret

heap_alloc_dbg

00389370 8B FF                mov         edi,edi
00389372 55 push ebp
00389373 8B EC mov ebp,esp
00389375 83 EC 0C sub esp,0Ch
00389378 E8 73 7D FA FF call __query_new_mode (03310F0h)
0038937D 85 C0 test eax,eax
0038937F 74 06 je heap_alloc_dbg+17h (0389387h)
00389381 C6 45 FF 01 mov byte ptr [ebp-1],1
00389385 EB 04 jmp heap_alloc_dbg+1Bh (038938Bh)
00389387 C6 45 FF 00 mov byte ptr [ebp-1],0
0038938B 8A 45 FF mov al,byte ptr [ebp-1]
0038938E 88 45 FE mov byte ptr [should_call_new_handler],al
00389391 8B 4D 14 mov ecx,dword ptr [line_number]
00389394 51 push ecx
00389395 8B 55 10 mov edx,dword ptr [file_name]
00389398 52 push edx
00389399 8B 45 0C mov eax,dword ptr [block_use]
0038939C 50 push eax
0038939D 8B 4D 08 mov ecx,dword ptr [size]
003893A0 51 push ecx
003893A1 E8 6A 00 00 00 call heap_alloc_dbg_internal (0389410h)
003893A6 83 C4 10 add esp,10h
003893A9 89 45 F8 mov dword ptr [ebp-8],eax
003893AC 83 7D F8 00 cmp dword ptr [ebp-8],0
003893B0 74 05 je heap_alloc_dbg+47h (03893B7h)
003893B2 8B 45 F8 mov eax,dword ptr [ebp-8]
003893B5 EB 35 jmp heap_alloc_dbg+7Ch (03893ECh)
003893B7 0F B6 55 FE movzx edx,byte ptr [should_call_new_handler]
003893BB 85 D2 test edx,edx
003893BD 74 10 je heap_alloc_dbg+5Fh (03893CFh)
003893BF 8B 45 08 mov eax,dword ptr [size]
003893C2 50 push eax
003893C3 E8 96 82 FA FF call __callnewh (033165Eh)
003893C8 83 C4 04 add esp,4
003893CB 85 C0 test eax,eax
003893CD 75 1B jne heap_alloc_dbg+7Ah (03893EAh)
003893CF E8 01 8E FA FF call __errno (03321D5h)
003893D4 89 45 F4 mov dword ptr [ebp-0Ch],eax
003893D7 83 7D F4 00 cmp dword ptr [ebp-0Ch],0
003893DB 74 09 je heap_alloc_dbg+76h (03893E6h)
003893DD 8B 4D F4 mov ecx,dword ptr [ebp-0Ch]
003893E0 C7 01 0C 00 00 00 mov dword ptr [ecx],0Ch
003893E6 33 C0 xor eax,eax
003893E8 EB 02 jmp heap_alloc_dbg+7Ch (03893ECh)
003893EA EB A5 jmp heap_alloc_dbg+21h (0389391h)
003893EC 8B E5 mov esp,ebp
003893EE 5D pop ebp
003893EF C3 ret
  • free

_free

0037E890 8B FF                mov         edi,edi
0037E892 55 push ebp
0037E893 8B EC mov ebp,esp
0037E895 83 EC 08 sub esp,8
0037E898 C7 45 FC 00 00 00 00 mov dword ptr [extra_instructions_for_patching_libraries],0
0037E89F 8B 45 FC mov eax,dword ptr [extra_instructions_for_patching_libraries]
0037E8A2 89 45 F8 mov dword ptr [ebp-8],eax
0037E8A5 6A 01 push 1
0037E8A7 8B 4D 08 mov ecx,dword ptr [block]
0037E8AA 51 push ecx
0037E8AB E8 52 52 FB FF call __free_dbg (0333B02h)
0037E8B0 83 C4 08 add esp,8
0037E8B3 8B E5 mov esp,ebp
0037E8B5 5D pop ebp
0037E8B6 C3 ret

__free_dbg

0038C2E0 8B FF                mov         edi,edi
0038C2E2 55 push ebp
0038C2E3 8B EC mov ebp,esp
0038C2E5 6A FE push 0FFFFFFFEh
0038C2E7 68 78 71 3F 00 push 3F7178h
0038C2EC 68 C0 BC 33 00 push offset _except_handler4 (033BCC0h)
0038C2F1 64 A1 00 00 00 00 mov eax,dword ptr fs:[00000000h]
0038C2F7 50 push eax
0038C2F8 83 C4 F0 add esp,0FFFFFFF0h
0038C2FB 53 push ebx
0038C2FC 56 push esi
0038C2FD 57 push edi
0038C2FE A1 0C 80 3F 00 mov eax,dword ptr [__security_cookie (03F800Ch)]
0038C303 31 45 F8 xor dword ptr [ebp-8],eax
0038C306 33 C5 xor eax,ebp
0038C308 50 push eax
0038C309 8D 45 F0 lea eax,[ebp-10h]
0038C30C 64 A3 00 00 00 00 mov dword ptr fs:[00000000h],eax
0038C312 6A 00 push 0
0038C314 E8 F0 52 FA FF call ___acrt_lock (0331609h)
0038C319 83 C4 04 add esp,4
0038C31C C7 45 FC 00 00 00 00 mov dword ptr [ebp-4],0
0038C323 83 7D 0C FF cmp dword ptr [block_use],0FFFFFFFFh
0038C327 75 1A jne _free_dbg+63h (038C343h)
0038C329 83 7D 08 00 cmp dword ptr [block],0
0038C32D 74 14 je _free_dbg+63h (038C343h)
0038C32F 8B 45 08 mov eax,dword ptr [block]
0038C332 50 push eax
0038C333 E8 28 D0 FF FF call header_from_block (0389360h)
0038C338 83 C4 04 add esp,4
0038C33B 8B 48 10 mov ecx,dword ptr [eax+10h]
0038C33E 89 4D E4 mov dword ptr [ebp-1Ch],ecx
0038C341 EB 06 jmp _free_dbg+69h (038C349h)
0038C343 8B 55 0C mov edx,dword ptr [block_use]
0038C346 89 55 E4 mov dword ptr [ebp-1Ch],edx
0038C349 8B 45 E4 mov eax,dword ptr [ebp-1Ch]
0038C34C 89 45 E0 mov dword ptr [ebp-20h],eax
0038C34F 8B 4D E0 mov ecx,dword ptr [ebp-20h]
0038C352 51 push ecx
0038C353 8B 55 08 mov edx,dword ptr [block]
0038C356 52 push edx
0038C357 E8 34 CA FF FF call free_dbg_nolock (0388D90h)
0038C35C 83 C4 08 add esp,8
0038C35F C7 45 FC FE FF FF FF mov dword ptr [ebp-4],0FFFFFFFEh
0038C366 E8 02 00 00 00 call _free_dbg+8Dh (038C36Dh)
0038C36B EB 0B jmp $LN10 (038C378h)
0038C36D 6A 00 push 0
0038C36F E8 79 69 FA FF call ___acrt_unlock (0332CEDh)
0038C374 83 C4 04 add esp,4

  • new[]
  1: //
2: // new_array.cpp
3: //
4: // Copyright (c) Microsoft Corporation. All rights reserved.
5: //
6: // Defines the array operator new.
7: //
8: #include <vcruntime_internal.h>
9: #include <vcruntime_new.h>
10:
11: ////////////////////////////////////
12: // new() Fallback Ordering
13: //
14: // +----------+
15: // |new_scalar<---------------+
16: // +----^-----+ |
17: // | |
18: // +----+-------------+ +----+----+
19: // |new_scalar_nothrow| |new_array|
20: // +------------------+ +----^----+
21: // |
22: // +------------+----+
23: // |new_array_nothrow|
24: // +-----------------+
25:
26: void* __CRTDECL operator new[](size_t const size)
27: {
003375D0 55 push ebp
003375D1 8B EC mov ebp,esp
28: return operator new(size);
003375D3 8B 45 08 mov eax,dword ptr [size]
003375D6 50 push eax
003375D7 E8 DB BF FF FF call operator new (03335B7h)
003375DC 83 C4 04 add esp,4
29: }
003375DF 5D pop ebp
003375E0 C3 ret
  • delete[]
     1: //
2: // delete_array.cpp
3: //
4: // Copyright (c) Microsoft Corporation. All rights reserved.
5: //
6: // Defines the array operator delete.
7: //
8: #include <vcruntime_internal.h>
9: #include <vcruntime_new.h>
10:
11: ////////////////////////////////////////////////////////////////
12: // delete() Fallback Ordering
13: //
14: // +-------------+
15: // |delete_scalar<----+-----------------------+
16: // +--^----------+ | |
17: // | | |
18: // +--+---------+ +--+---------------+ +----+----------------+
19: // |delete_array| |delete_scalar_size| |delete_scalar_nothrow|
20: // +--^----^----+ +------------------+ +---------------------+
21: // | |
22: // | +-------------------+
23: // | |
24: // +--+--------------+ +------+-------------+
25: // |delete_array_size| |delete_array_nothrow|
26: // +-----------------+ +--------------------+
27:
28: _CRT_SECURITYCRITICAL_ATTRIBUTE
29: void __CRTDECL operator delete[](void* const block) noexcept
30: {
003375F0 55 push ebp
003375F1 8B EC mov ebp,esp
31: operator delete(block);
003375F3 8B 45 08 mov eax,dword ptr [block]
003375F6 50 push eax
003375F7 E8 0E A9 FF FF call operator delete (0331F0Ah)
003375FC 83 C4 04 add esp,4
32: }
003375FF 5D pop ebp
00337600 C3 ret

c++ 反汇编 堆变量的更多相关文章

  1. php面试题7(1、unset变量是删除栈变量,并不删除堆变量)(2、php爬虫特别简单: 可以file_get_contents和直接fopen)

    php面试题7(1.unset变量是删除栈变量,并不删除堆变量)(2.php爬虫特别简单: 可以file_get_contents和直接fopen) 一.总结 1.unset变量是删除栈变量,并不删除 ...

  2. C语言中不同变量的访问方式

    C语言中的变量大致可以分为全局变量,局部变量,堆变量和静态局部变量,这些不同的变量存储在不同的位置,有不同的生命周期.一般程序将内存分为数据段.代码段.栈段.堆段,这几类变量存储在不同的段中,造成了它 ...

  3. PHP之static静态变量详解(一)

    什么是static静态变量?(以下为在C语言中的理解) 静态变量 类型说明符是static. 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在 ...

  4. C, C#, AS3的变量

    高级语言中变量分值类型和引用类型, C中则分栈和堆, 在作为函数参数传递时,值类型复制,引用类型传递引用,不复制: 高级语言中一些基本类型默认是值类型, 其他基本都是引用类型. C语言中栈和堆变量可以 ...

  5. C语言中堆和栈的区别

    原文:http://blog.csdn.net/tigerjibo/article/details/7423728 C语言中堆和栈的区别 一.前言: C语言程序经过编译连接后形成编译.连接后形成的二进 ...

  6. stm32 堆和栈(stm32 Heap & Stack)【worldsing笔记】

    关于堆和栈已经是程序员的一个月经话题,大部分有是基于os层来聊的.   那么,在赤裸裸的单片机下的堆和栈是什么样的分布呢?以下是网摘:     刚接手STM32时,你只编写一个 int main() ...

  7. C语言的变量的作用域和生存期

    一.c程序存储空间布局 C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分:一个程序只有一个副本:只读,防止程序由于意外事故而修改自身指令:      2)初始化数据段(数据段)——在 ...

  8. static变量的使用

    静态变量 类型说明符是static. 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间 ...

  9. C语言静态函数静态变量

    C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数.而内部对象是指定义在函数内部的函数参数及变量. 外部变量定义在函数之外,因此可以在许多函数中使用.由于C语言不允许在一个函数中定义 ...

随机推荐

  1. DC1(msf drupal7+suid-find提权)

    这边我们靶机是仅主机模式,IP是192.168.56.101,,直接上msf拿到shell,  不过payload要改一下 改成php/meterperter/bind_tcp 拿到shell了 ,采 ...

  2. μC/OS-III---I笔记11---就绪任务列表管理

    就绪优先级为映像响表 在UCOSIII内,任务调度是要先找到优先级最高的任务,然后执行.理论上对于UCOSIII可以有无数个优先级,每个优先级又可以有无数个任务但是对于这么多的任务如何快速查到到当先就 ...

  3. CSS Architecture & CSS Design Patterns

    CSS Architecture & CSS Design Patterns BEM Block, Element, Modifier https://en.bem.info/methodol ...

  4. macOS 升级后导致 dart bug

    macOS 升级后导致 dart bug macOS 10.15.5 $ demo_app git:(master) flutter doctor # /Users/xgqfrms-mbp/Docum ...

  5. MacBook Pro 关闭触控板

    MacBook Pro 关闭触控板 https://support.apple.com/zh-cn/HT204895 https://support.apple.com/zh-cn/HT203171 ...

  6. C++算法代码——统计数字

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1109 题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000( ...

  7. HQYJ嵌入式学习笔记——C语言复习day1

    第一天:Linux命令 vim操作 第二天:数据类型 运算符 顺序语句第三天:分支语句 循环语句第四天:循环语句 数组第五天:数组第六天:指针第七天:函数 数组与指针第八天:数组指针第九天:递归 第十 ...

  8. 纯js日历插件

    成品的效果图 1.HTML文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  9. Python数据结构与算法_回文数(03)

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121输出: true 示例 2: 输入: -121输出: false解释: 从左向右读, ...

  10. ConcurrentHashMap允许一边遍历一边更新,而用HashMap则会报线程安全问题

    ConcurrentHashMap线程安全的,允许一边更新.一边遍历,也就是说在对象遍历的时候,也可以进行remove,put操作,且遍历的数据会随着remove,put操作产出变化,而如果用Hash ...