- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
汇汇编编语语⾔⾔基基础础之之五五-⼀⼀个个源源代代码码与与反反汇汇编编代代码码对对照照的的例例⼦⼦
如下的C++代码,对应的汇编代码会是什么样⼦呢?
#includestdio.h
intAddemup(int,int);
voidmain(void)
{
intx=5;
int=10;
intz=0;
z=Addemup(x,);
printf(z=%i\n,z);
}
intAddemup(inta,intb)
{
intc=0;
c=a+b;
return(c);
}
1:#includestdio.h
2:
3:intAddemup(int,int);
4:
5:voidmain(void)
6:{
addemup!main:
55pushebp;savebasepointer
8becmovebp,esp;setstackpointer
83ec0csubesp,0xc;makeroomforlocals
//这⼀段中,我们先保存了栈底指针(ebp),以便稍后恢复它。
//之后让栈基指向栈顶,把原来的栈顶作为新栈底了,形象点的说,就是栈向上移动了原来栈长度的⼀段距离。
//这⾥,我们可以看出,若要访问函数参数,那么采⽤的相对于ebp的位移就是正的,
//⽽函数的局部变量的位移就是负的。
7:intx=5;
8:int=10;
9:intz=0;
c745fmovdwordptr[ebp-0x4],0x5;localx=5
0040100dc745f80a000000movdwordptr[ebp-0x8],0xa;local=10
c745f400000000movdwordptr[ebp-0xc],0x0;localz=0
//ptr指令是修改属性运算符,⽤来明确指出变量、标号或地址表达式的类型属性(只所的指令内有效)。
//类型放PTR之前,可以是BYTE、WORD、DWORD、NEAR、FAR。
//这⾥的操作是将x5这个操作数扩展成dword存⼊地址为[ebp-0x4]的内存中
10:
11:z=Addemup(x,);
0040101b8b45f8moveax,[ebp-0x8];loadeaxwith
0040101e50pusheax;pushonstack
0040101f8b4dfcmovecx,[ebp-0x4];loadecxwithx
51pushecx;pushxonstack
e81b000000calladdemup!Addemup;callAddemup
83c408addesp,0x8;fixup
文档评论(0)