栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

2019-2020-1 20212819《Linux内核原理与分析》第二周作业

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2019-2020-1 20212819《Linux内核原理与分析》第二周作业

实验一 反汇编一个简单的C程序 实验过程
  • 首先创建main.c文件,然后使用vim编辑代码。

  • 然后使用如下命令编译成汇编代码文件main.s。

$ gcc –S –o main.s main.c -m32

  • main.s删除“.”字符开头后的代码
分析main.s的汇编代码
g:
	pushl	%ebp//ebp入栈
	movl	%esp, %ebp//ebp=esp,生成新的堆栈空间
	movl	8(%ebp), %eax//将变址寻址ebp+8所指向内存的值存入eax
	addl	$19, %eax//将eax的值加19
	popl	%ebp//ebp出栈,esp减去4,指向上一个位置
	ret//返回,继续执行下一条指令
f:
	pushl	%ebp//ebp压栈,esp指向下一个位置
	movl	%esp, %ebp//将ebp指向esp的位置
	subl	$4, %esp //esp减4,即指向下一个位置
	movl	8(%ebp), %eax//ebp向上移动两位,eax=8
	movl	%eax, (%esp)//eax内容存入esp指向的内存
	call	g//eip入栈,调用g
	leave//包括movl %ebp,%esp和popl %ebp两条指令
	ret//返回,继续执行下一条指令
main:
	pushl	%ebp//ebp压栈
	movl	%esp, %ebp//将ebp指向esp所指向的栈地址。
	subl	$4, %esp//esp指向的位置向下移动一格
	movl	$19, (%esp)//立即数19放到esp所在位置
	call	f//执行pushl eip和movl f eip两个动作,eip压栈,ebp指向下一个位置,eip指向f。
	addl	$1, %eax
	leave//堆栈回到main函数最初的状态
	ret//退出main
总结

通过本次的学习和实验,对于C语言程序在计算机上具体是怎么工作的有了一个比较清晰的认识,了解到寄存器的作用和汇编指令的执行过程,遇到的问题是对于堆栈的理解不强,但通过实验加深了认识。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/288981.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号