linux下c与汇编

在x64位linux环境下,将左侧代码在gcc –S –o main.s main.c -m32编译成为汇编代码。
785765-20170215152845925-1723664162.png

运行过程

函数的入口是main。
进入新的函数便保存原有的ebp指针位置,并把ebp指向esp,开拓出一个新的堆栈块。
右侧20,21在main所属的堆栈块中保存整数3
右侧22调用新函数f,于是转移到右侧9,10开拓新的堆栈块
右侧11,12,13 把3放入eax中并把3放入此函数站 也就是对应函数的f(3)传入参数
右侧14调用新函数g,转移到2,3 又开拓堆栈块,传入参数,把3放入eax并加一 在结尾撤销一个堆栈块。ret使得读入原来eip的位置,继续从15运行。15撤销堆栈块 并通过ret修改eip指针指回右侧23
右侧23 eax加2得到最终结果 撤销堆栈块并修改会原eip值 至此整个程序结束

总结:

图灵任何可计算的模型先是抽象成人的运算过程又机械化抽象成为图灵机。在汇编情况下和在c语言编程的情况下计算能力是等同的,但是在汇编语言下可供操作的一些数据结构变得更加原始。
当前注视的位置变成了eip而可供记录会修改的除了寄存器还有内存空间,一些寄存器起到了指针的作用。而每进入一个新的函数,需要开拓一个新的堆栈块。从此处可以看出在会汇编下的编程模式。

参考:

  1. 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

转载于:https://www.cnblogs.com/xiaofanshao/p/6401631.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值