贺邦  原创作品转载请注明出处 《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000#/info

知识准备

冯诺依曼体系结构

核心思想

1.冯诺依曼是:数字计算机的数制采用二进制;计算机应该按照程序顺序执行。

2.采用二进制作为计算机数值计算的基础,以0、1代表数值。不采用人类常用的十进制计数方法,二进制使得计算机容易实现数值的计算。

3.程序或指令的顺序执行,即预先编好程序,然后交给计算机按照程序中预先定义好的顺序进行数值计算。

汇编语言的五种寻址模式

·        寄存器寻址 registermode: %寄存器  例如:%edx 访问寄存器edx

·        立即寻址 immediate: $数字   例如:$0x123 数值0x123

·        直接寻址 direct:数字   例如:0x123访问地址0x123指向的内存

·        间接寻址 indirect: (%寄存器) (%ebx) 例如:访问寄存器ebx中的地址指向的内存

·        变址寻址 displaced:偏移量(%寄存器) 4(%ebx):访问寄存器ebx中的地址再加4指向的内存;

几个重要的汇编指令

Example instruction

What it does

Pushl %eax

Subl $4, %esp   //栈顶指针减4,栈在向下生长一个位置

Movl %eax, (%esp) //将eax中的值放入栈顶指针指向的内存位置

Popl %eax

Movl (%esp), %eax //从栈顶指针指向的内存中的值放入eax中

Addl $4, %esp //栈顶指针加4,栈在向上收缩

Call 0x12345

Pushl %eip //ip压栈

Movl $0x12345, %eip //将0x12345放入eip中

Ret

Popl %eip //ip出栈

反汇编实验截图

1、源代码 main.c结果应该为,10

2、执行完反汇编命令后删除多余项的代码。

3.手绘分析过程。

总结

看似简单的代码背后,其实隐藏着计算机复杂的运算,不容小觑。PS.互批时请手下留情,如有不懂请咨询wechat : hlqhlqhb

最新文章

  1. mybatis Generator生成代码及使用方式
  2. oracle 11g RAC public/virtual/SACN/private IP we need to know
  3. url传值错误
  4. typecho流程原理和插件机制浅析(第一弹)
  5. [Ubuntu] Install subversion1.8 on Ubuntu13.10
  6. DB2之隔离级别和锁的论述
  7. F# 越用越喜欢
  8. Linux常用配置讲解
  9. PyTorch中ReLU的inplace
  10. JavaScript基础二
  11. kNN算法学习(一)
  12. java linux ftp问题
  13. Python Appium 元素定位方法简单介绍
  14. ionic this.navCtrl.push()和this.navCtrl.pop()
  15. FFmpeg(10)-利用FFmpeg进行视频像素格式和尺寸的转换(sws_getCachedContext(), sws_scale())
  16. linux 系统管理 实战技巧
  17. bzoj1190 [HNOI2007]梦幻岛宝珠
  18. Unity Lighting - Light Types 灯光类型(八)
  19. php -- php的事务处理
  20. Foxman, 基于微核架构的 Mock 解决方案

热门文章

  1. nginx 服务器在上传文件出现413代码的解决方法
  2. MySQL Error Code文档手册---摘自MySQL官方网站
  3. 6.Solr4.10.3API使用(CURD)
  4. canvas实例_时钟
  5. python第二十九课——文件读写(读取数据操作)
  6. Invalid action class configuration that references an unknown class named [XX] .
  7. Android与js交互拍照上传资料
  8. Maven单独构建多模块项目中的单个模块
  9. 编译有哪些阶段,动态链接和静态链接的区别 c++
  10. 2018-2019-2 20165302 《网络对抗技术》Exp3 免杀原理与实践