《信息安全系统设计基础》家庭作业 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;
	}

posted @ 2016-11-26 12:43  20145330孙文馨  阅读(338)  评论(2编辑  收藏  举报