汇编与C++指针
来源:互联网 发布:手机mac码查询 编辑:程序博客网 时间:2024/06/05 14:34
C++代码如下:
#include<iostream>#include<stdlib.h>using namespace std;int main(){ int a = 1; int* p=NULL; p=(int*)malloc(sizeof(int)); *p = 5; cout<<&a; cout<<"\n"; cout<<&p; cout<<"\n"; cout<<p; cout<<"\n"; cout<<*p; return 0;}
相应的汇编语言为(不全):
_TEXT SEGMENT_a$ = -8 ; size = 4_p$ = -4 ; size = 4_main PROC; 5 : { push ebp mov ebp, esp sub esp, 8; 6 : int a = 1; mov DWORD PTR _a$[ebp], 1; 7 : int* p=NULL; mov DWORD PTR _p$[ebp], 0 ;注意到:目前的指针指向0——空地址。; 8 : p=(int*)malloc(sizeof(int)); push 4 call _malloc add esp, 4 mov DWORD PTR _p$[ebp], eax ;注意到:申请内存之后,p指针已经指向了一个地址。; 9 : *p = 5; mov eax, DWORD PTR _p$[ebp] mov DWORD PTR [eax], 5; 10 : cout<<&a; lea ecx, DWORD PTR _a$[ebp] push ecx mov ecx, …… call ……; 12 : cout<<&p; lea edx, DWORD PTR _p$[ebp];注意:传递的是p指针的地址 push edx mov ecx, …… call ……; 14 : cout<<p; mov eax, DWORD PTR _p$[ebp];注意,传递的是p指针指向的地址。 ;也即是当前栈区中存的实际数据。 push eax mov ecx, …… call ……; 16 : cout<<*p; mov ecx, DWORD PTR _p$[ebp];传递地址 mov edx, DWORD PTR [ecx];根据地址寻找数据 push edx mov ecx, …… call ……; 17 : return 0; xor eax, eax; 18 : } mov esp, ebp pop ebp ret 0_main ENDP_TEXT ENDS
程序运行结果及示意图如下:
0 0
- 汇编与C++指针
- C 语言指针与汇编地址(一)
- 汇编与C....
- 汇编与C配合
- Keil c与汇编
- C语言与汇编
- 汇编与C语言
- c/c++字符指针与字符数组变量汇编层面的分析
- C语言中的函数与函数指针——汇编角度剖析
- C指针原理(27)-汇编分析C指针机制
- 汇编学习-汇编指令与C语言
- 汇编与C/C++内联嵌入汇编
- C指针原理(1)-AT&T汇编
- C指针原理(2)-AT&T汇编
- C指针原理(3)-AT&T汇编
- C指针原理(4)-AT&T汇编
- C指针原理(5)-AT&T汇编
- C指针原理(28)-AT&T汇编
- 单链表的实现
- Leetcode 27. Remove Element
- Android LayoutAnimation使用
- iOS颜色转换
- 自定义Dialog对话框
- 汇编与C++指针
- 阿斯蒂芬 阿斯蒂芬
- SoapUI测试接口
- 关于oracle with as用法
- 计算机组成.运动中的小数点.浮点数
- C++11的时间库 chrono
- Portlet里面的标签和变量的关系,以及需要在使用render URL前声明这些URL的句子的分析
- 常用的用户名的正则解析
- 启动tomcat报错./startup.sh: Permission denied