热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

20172018120155208《信息安全系统设计基础》第五周学习总结

2017-2018-120155208《信息安全系统设计基础》第五周学习总结学习目标理解逆向的概念掌握X86汇编基础,能够阅读(反)汇编代码了解ISA(指令集体系结构)理解函数调用

2017-2018-1 20155208 《信息安全系统设计基础》第五周学习总结

学习目标

  • 理解逆向的概念
  • 掌握X86汇编基础,能够阅读(反)汇编代码
  • 了解ISA(指令集体系结构)
  • 理解函数调用栈帧的概念,并能用GDB进行调试

教材内容总结

  • 执行汇编命令:gcc –s xxx.c –o xxx.s反汇编命令:objdump –d xxx 64位处理器得到32代码的命令:gcc –m32 –s xxx.c

注意:64位机器上想要得到32代码:gcc -m32 -S xxx.c MAC OS中没有objdump, 有个基本等价的命令otool

  • X86 寻址方式经历三代:

    1、DOS时代的平坦模式,不区分用户空间和内核空间,很不安全

    2、 8086的分段模式

    3、IA32的带保护模式的平坦模式

  • ISA(指令集体系结构):机器级程序的格式和行为,定义了处理器状态、指令的格式,以及每条指令对状态的影响

  • 数据传送示例

    局部变量通常保存在寄存器中

    寄存器访问比存储器访问要快的多。

    算术和逻辑操作四组操作

    加载有效地址:将有效地址写入目的操作数,目的操作数必须是寄存器。

  • 一元操作:只有一个操作数,可以是寄存器也可是存储器位置。

  • 二元操作:源操作数是第一个,可以是立即数、寄存器、存储器 ;目的操作数是第二个,可以是寄存器、存储器;两个不能同时为存储器。

  • 技术分享
  • 二进制文件可以用od 命令查看,也可以用gdb的x命令查看。 有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看,如:

`od code.o | more`

`od code.o > code.txt`
  • 操作数的三种类型:立即数、寄存器、存储器

  • 栈:“后进先出”,栈顶元素的地址是所有栈中元素地址中最低的。

  • 有效地址的计算方式 Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s

  • MOV相当于C语言的赋值 “=” (注意不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下)

  • 移位操作中移位量可以是立即数或%cl中的数

  • leal不改变条件码寄存器

  • SET指令根据t=a-b的结果设置条件码

  • call/ret; 函数返回值存在%eax中

  • 寄存器使用惯例

程序寄存器组是唯一能被所有过程共享的资源。

惯例是为了防止一个过程P调用另一个过程Q时寄存器中的值被覆盖

使用惯例:%eax,%edx,%ecx 调用者保存寄存器 %ebx,%esi,%edi 被调用者保存寄存器 %ebp,%esp 保持寄存器

保存某值的两种方式

由调用者保存。在调用之前就压进栈。 由被调用者保存,在刚被调用的时候就压进栈,并在返回之前恢复。

gdb调试

技术分享

实验练习中的问题和解决过程

使用gcc –S –o main.s main.c -m32命令编译成汇编代码,如下代码中的数字和函数名请自行修改以防与他人雷同

技术分享

技术分享

代码托管

代码上传截图:

技术分享

码云链接

学习进度条

 代码行数(新增/积累)博客量(新增/积累学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 5/5 1/1 8/8
第二周 120/120 1/1 12/12
第三周 100/100 1/1 15/15
第四周 80/80 1/1 9/9
第五周 50/50 1/1 6/6

参考资料

《深入理解计算机系统V3》学习指导

详细介绍Linux指令od

2017-2018-1 20155208 《信息安全系统设计基础》第五周学习总结


推荐阅读
  • # 运维小白的成长日记第七天OSI七层传输层/应用层精讲!
    运维小白的成长日记第七天-OSI七层传输层应用层精讲!1、IP提供了点到点的连续接,通过IP地址可以找到目标主机。但是目标主机有很多应用,服务器到底使用哪个应用来响应客户端?通过端 ... [详细]
  • vs中检测内存泄漏的方法分类:MFC2013-03-0821:442764人阅读评论(0)收藏举报使用vs的内存检测有以下几种方法。在debug模式下以F5运行:方法一:[html ... [详细]
  • classTestBreakContinue{publicstaticvoidmain(String[]args){for(inti1;i ... [详细]
  • Introspector类为通过工具学习有关受目标JavaBean支持的属性、事件和方法的知识提供了一个标准方法。对于这三种信息,Introspector将分别分析bean的类和 ... [详细]
  • Python并发复习
    一、多线程的调用threading模块建立在thread模块之上。thread模块以低级、原始的方式来处理和控制线程,而threading模块通过对thread进行二次封装,提供了 ... [详细]
  • 实验十:指针
    #includevoidsplitfloat(floatx,int*intpart,float*fracpart);intmain(void){intintpa ... [详细]
  • C++学习之Visual Studio安装以及首次使用
    一、安装VisualStudio首先下载VisualStudio链接:http:pan.baidu.coms1pLhJt0Z密码:uqyc将.ios文件解压得到以下文件:点击vs_ ... [详细]
  • 自己的macbookPro只有128G的硬盘,存储空间经常不足,终于找到了个大文件,,UsersusrnameLibraryContainerscom.tencent.qqData ... [详细]
  • jenkins 邮件配置步骤
    一、进行系统管理中的邮件配置步骤:1、设置ExtendedE-mailNotification二、对构建的job添加邮件发送的步骤: ... [详细]
  • Spring WebFlux开门迎客,却来了一位特殊客人
    话说SpringWebFlux已经出现有一段时间了,但是知道他的人并不是很多。这让他很是闷闷不乐。还有更惨的是,那些敢于吃螃蟹的人在尝试了他之后,有的竟把代码重新改回到Spring ... [详细]
  • 一个正整数K,给出KMod一些质数的结果,求符合条件的最小的K。例如,K%21,K%32,K%53。符合条件的最小的K23。收起一个正整数K,给出KMod一些质数的结果,求符合条件 ... [详细]
  • MATLAB分布拟合工具箱distributionFitter
    借助MATLAB(R2017b)分布拟合工具箱distributionFitter,我们可以快速地检查数据的分布。可以进行非参数密度估计(核平滑方法)和参数密度估计(Beta分布、 ... [详细]
  • 1.亥姆霍兹线圈:用于制造一个均匀磁场并垂直于电子运行轨道两个并列的线圈2.LR回路:基尔霍夫定律不成立,因为有自感存在cos2wt或者sin2wt的时间平均值是12思考: ... [详细]
  • 图基本概念及操作
    图基本概念及操作一、思维导图二、重要概念笔记1.图的定义图(Graph)G由顶点集合V(G)和边集合E(G)构成。图可分为有向图和无向图。2.图的存储结构一、邻接矩阵:二、邻接表; ... [详细]
  • jeeSite快速二次开发框架
    一.jeeSite之前端弹框插件的应用1.01简述弹框插件jeeSite前端提示框架主要使用了jBox2.3插件(关于jBox此处不做介绍了,可自行百度 ... [详细]
author-avatar
没有性欲的机器猫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有