• 《信息安全系统设计基础》家庭作业 6.32 7.6 7.8 7.13.7.14 8.20


    《信息安全系统设计基础》家庭作业 6.32 7.6 7.8 7.13.7.14 8.20

    第六章 6.32

    6.32

    • 假设程序使用6.31中的高速缓存,引用位于地址ox0718处的1字节字。
    • A 0x718
      • 12 11 10 9 8 7 6 5 4 3 2 1 0 (每个数字分别对应下面一位)
      • 0 0 1 1 1 0 0 0 1 1 0 0 0
    • B
      • 参数 - 值
      • 块偏移CO - 0x00
      • 索引CI - 0x6
      • 标记CT- 0x38
      • 命中? - Yes
      • 返回值- 0xFA

    第七章 7.6 7.8 7.13 7.14

    7.6

    • 指出定义该符号的模块、符号类型以及在它模块中所处的节

    7.8

    • 说明链接器是如何解析在每个模块中有多重定义引用的
      • A
        • a)REF(main.1)-->DEF(main.1)
        • b)REF(main.2)-->DEF(main.2)
      • B
        • UNKNOWN
      • C
        • ERROR

    7.13

    • 这道题可以推测出来哪些代码需要重定位。
      当然,我们假设所有的符号都已经有了运行时地址。
      • .text中有3个地方有重定位。

      • 第12行是调用p3,返回值被放在了edx中。

      • 14行要将xp的值放入eax。这里的0x0其实应该重定位为xp的地址,所以这应该是一个绝对引用。

      • 接着add (%eax),%edx,也就是完成了*xp + p3()。

      • 然后再push %edx,作为参数压入栈。

      • 第17行是调用p2()。最后返回。

      • 所以.text中有三个地方需要重定位。

      • 在.data节中,第一个x是不需要重定位的,第二个xp的值需要重定位为x的地址。

    7.14

    汇编代码其实比较好理解。eax是val,最开始val-100和5比较,如果大于5,就直接到16行去+6。

    否则根据跳转表跳到相应的地址(edx*4+0)。

    所以,重定位时,需要将所有的ja和jmp指令的目的地修改为对应的地址。

    需要注意的是第8行,jmp *0x0(,%edx,4)这一句。
    这里的0x0是指.rodata的地址,这是肯定需要重定位的。

    在.rodata中,所有的跳转表都需要重定位到相应代码的位置。

    第八章8.20

    8.20

    其实这道题不需要在环境变量里抓取name,只要用execve。

    
    	int main(int argc, char* args[])
    
    	{
       		 execve("/bin/ls", args, environ); //没有错误处理,注意环境变量
        	return 0;
    	}
    
    
  • 相关阅读:
    使用spine骨骼动画制作的libgdx游戏
    【翻译】针对多种设备定制Ext JS 5应用程序
    【翻译】Ext JS最新技巧——2015-1-2
    Libgdx1.5.3发布
    Solr创建Core的两种方法
    Solr 7.7.0 部署到Tomcat
    CentOS7下安装JDK详细过程
    Linux常用命令总结
    Redis protected-mode属性解读
    使用RedisDesktopManager工具,解决连接失败问题
  • 原文地址:https://www.cnblogs.com/20145330swx/p/6103934.html
Copyright © 2020-2023  润新知