通过反汇编C语言小程序学习Liunx汇编语言
大家好! 我是来自山东师范大学的吴乐。
今天在《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第一单元学习了一些基本的汇编语言
现在我分享一下我的学习历程,本次课程的目的是通过反汇编一段简单的小程序学习基本汇编指令。
不废话了,上图
第一步:
首先在Code目录中编写一段简单的C语言小程序,不涉及输入输出,代码如下。
- int g(int x)
- {
- return x + 1;
- }
- int f(int x)
- {
- return g(x);
- }
- int main(void)
- {
- return f(6) + 1;
- }
第二步
gcc –S –o main.s main.c -m32
汇编结束后打开如图所示。
第三步:
去除一些链接之后,得到了干净的汇编代码。
第四步:
堆栈的调用过程(设初始ebp为0位置每次减4字节相当于升1个标号,EIP逻辑对应代码的行号):
调用变化如下
main f g f main
EIP:18 19 20 21 22 23 9 10 11 12 13 14 15 2 3 4 5 6 7 8 16 17 24 25 26
ebp:0 0 1 1 1 1 1 1 4 4 4 4 4 4 4 7 7 7 4 4 1 1 1 0 ...
esp:0 1 1 2 2 3 3 4 4 5 5 5 6 6 7 7 7 7 6 5 3 2 2 0 ...
eax:0 0 0 0 0 0 0 0 0 0 6 6 6 6 6 6 6 7 7 7 7 7 8 8 8
栈内的元素按先后顺序分别为:ebp0 6 eip23 ebp1 6 eip15 ebp4
总结:计算机的工作原理与机制
可见,计算机的工作流程也是取指执行的过程。
其次,它是在顺序执行基础上加入适当的跳转机制。
主存的内容必须载入不同寄存器中cpu才能进行处理。
最后,它实际上是通用图灵机的具体实现,并把控制与储存部分封装为CPU处理中心。
通过反汇编C语言小程序学习Liunx汇编语言的更多相关文章
- Linux下简单C语言小程序的反汇编分析
韩洋原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 写在开始,本文为因为参加MOO ...
- c语言小程序以及java生成注释文档方法
c语言小程序:sizeof和strlen() sizeof运算符以字节为单位给出数据的大小,strlen()函数以字符为单位给出字符串的长度,字符和字节不是一回事. char类型用于存储字母和标点符号 ...
- C语言小程序——推箱子(窄字符和宽字符)
C语言小程序——推箱子(窄字符Version) 推箱子.c #include <stdio.h> #include <conio.h> #include <stdlib. ...
- 微信小程序 学习资料
微信小程序 学习资料 资料名称 网址 官方教程 https://developers.weixin.qq.com/miniprogram/dev/index.html?t=18110517
- Linux C语言小程序
Linux C语言小程序 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include & ...
- 【微信小程序学习笔记】入门与了解
[微信小程序学习笔记(一)] IDE 下载安装 下载地址 官方工具:https://mp.weixin.qq.com/debug/w … tml?t=1476434678461 下载可执行文件后,可按 ...
- 微信小程序学习笔记二 数据绑定 + 事件绑定
微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...
- 微信小程序学习笔记一 小程序介绍 & 前置知识
微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...
- 微信小程序学习指南
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
随机推荐
- 李洪强iOS开发之Foundation框架—结构体
Foundation框架—结构体 一.基本知识 Foundation—基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框 ...
- Unity UGUI —— 无限循环List(转载)
using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; ...
- 初识io流条件状态
一 流状态 C++中的输入输出系统负责记录每一个输入输出操作的结果信息,这些当前的状态信息被包含在io_state类型的对象中.io_state是一个枚举类型(就像open_mode一样),以 ...
- Java开发--操作MongoDB
http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过前一篇文章我们 ...
- 2014--9=17 软工二班 MyEclipse blue==2
关于Java中的getInetAddress方法 联网的话是一个分配的地址,不联网的话是本地localhost package cn.rwkj.test; import java.io.IOExcep ...
- SQLite数据库的体系结构(翻译自sqlite.org)
$1 简介 本文档描述了SQLite库的体系结构,这些信息对那些想理解和修改SQLite的内部工作机制的人是有用的. 下图显示了SQLite的主要组成部件及其相互关系,下面的内容将描述每一 ...
- qt外部数据传入实现动态的折线图绘制
在嵌入式开发中,实现数据收集与显示很常见,对于希望数据稳定的应用来说, 折现图的表现形式很符合条件. 本实现是通过qt的signal-slot来 ...
- jQuery编程基础精华01(jQuery简介,顶级对象$,jQuery对象、Dom对象,链式编程,选择器)
jQuery简介 什么是jQuery? jQuery就是一个JavaScript函数库,没什么特别的.(开源)联想SQLHelper类 jQuery能做什么?jQuery是做什么的? jQuery本身 ...
- 34. Search for a Range
题目: Given a sorted array of integers, find the starting and ending position of a given target value. ...
- 转 Difference between WCF and Web API and WCF REST and Web Service
http://www.dotnet-tricks.com/Tutorial/webapi/JI2X050413-Difference-between-WCF-and-Web-API-and-WCF-R ...