c语言函数调用详细过程

c语言函数调用详细过程

ID:8788429

大小:65.50 KB

页数:10页

时间:2018-04-07

c语言函数调用详细过程_第1页
c语言函数调用详细过程_第2页
c语言函数调用详细过程_第3页
c语言函数调用详细过程_第4页
c语言函数调用详细过程_第5页
资源描述:

《c语言函数调用详细过程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、作者:BadcoffeeEmail:blog.oliver@gmail.com2004年10月原文出处:http://blog.csdn.net/yayong这是作者在学习X86汇编过程中的学习笔记,难免有错误和疏漏之处,欢迎指正。1.编译环境  OS:Axianux1.0  Compiler:gcc3..2.3  Linker:SolarisLinkEditors5.x  DebugTool:gdb  Editor:vi2.最简C代码分析为简化问题,来分析一下最简的c代码生成的汇编代码:   #vitest1.c    intmain()   {     return0;   }      编译该程序,产生二进制文件:   #gcc-ostartstart.c#filestart    start:ELF32-bitLSBexecutable,Intel80386,version1(SYSV),forGNU/Linux2.

3、2.5,dynamicallylinked(usessharedlibs),notstripped    start是一个ELF格式32位小端(LittleEndian)的可执行文件,动态链接并且符号表没有去除。这正是Unix/Linux平台典型的可执行文件格式。    用gdb反汇编可以观察生成的汇编代码:[wqf@15h166attack]$gdbstartGNUgdbAsianux(6.0post-0.20040223.17.1AX)Copyright2004FreeSoftwareFoundation,

4、Inc.GDBisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouarewelcometochangeitand/ordistributecopiesofitundercertainconditions.Type"showcopying"toseetheconditions.ThereisabsolutelynowarrantyforGDB. Type"showwarranty"fordetails.ThisGDBwasconfiguredas"i3

5、86-asianux-linux-gnu"...(nodebuggingsymbolsfound)...Usinghostlibthread_dblibrary"/lib/tls/libthread_db.so.1".(gdb)disassemblemain         --->反汇编main函数Dumpofassemblercodeforfunctionmain:0x08048310:   push  %ebp  --->ebp寄存器内容压栈,即保存main函数的上级调用函数的栈基地址0x

6、08048311:   mov   %esp,%ebp --->esp值赋给ebp,设置main函数的栈基址0x08048313:   sub   $0x8,%esp --->通过ESP-8来分配8字节堆栈空间0x08048316:   and   $0xfffffff0,%esp--->使栈地址16字节对齐0x08048319:   mov   $0x0,%eax ---> 无意义0x0804831e:  sub   %eax,

7、%esp ---> 无意义0x08048320:  mov   $0x0,%eax  --->设置函数返回值00x08048325:  leave    --->将ebp值赋给esp,pop先前栈内的上级函数栈的基地址给ebp,恢复原栈基址.0x08048326:  ret  --->main函数返回,回到上级调用.0x08048327:  n

8、opEndofassemblerdump.注:这里得到的汇编语言语法格式与Intel的手册有很大不同,Unix/Linux采用AT&T汇编格式作为汇编语言的语法格式,如果想了解AT&T汇编可以参考文章Linux汇编语言开发指南.问题一:谁调用了main函数?在C语言的层面来看,main函数是一个程序的起始入口点,而实际上,ELF可执行文件的入口点并不是main而是_start。gdb也

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。