ICS 期末复习试卷

1

2

1: ebp 旧值
2: ecx
3: n
4: d
5: d.val.f
6: n
7: 0x804a008(格式化字符串)
8: 0x80491b3(返回地址)

结构体占 8 字节,

3

比例变址,

相对 pc 寻址,用目标地址-初始=偏移量,0x80491dc-0x8049209=0xd3。

看机器数,哪些机器数是小端存储。例如在地址 0x8049176 处。

4

0x80491df 到 0x80491e6 的指令。

a 的起始地址可以从最后一条赋值语句来,因此 0x804c244 是第一个 .val.n!所以要-4 才是真正的起始地址,比例为 8 的变址。

也可以从 sum 地址的起始+ sum 的大小。

5

指令 cmp $0x7f, %ebx 的本质是执行减法操作 (%ebx) - 0x7f,即 100 - 127,但并不保存结果,仅根据结果更新标志寄存器 EFLAGS。

CF (进位标志位):执行 100 - 127 时,由于被减数小于减数,在无符号运算视角下会产生借位。因此 CF = 1。

ZF (零标志位):计算结果为 -27,不等于 0。因此 ZF = 0。

SF (符号标志位):计算结果为 -27,是一个负数(最高位为 1)。因此 SF = 1。

OF (溢出标志位):这是一个正数减去正数的运算。在有符号运算中,只有“正减负”或“负减正”才可能产生溢出。两个数值均在有符号字节/字表示范围内且同号相减,结果不会超出表示范围。因此 OF = 0。

6

都位于 .bss 节。

位于读写数据段,局部变量 d 位于栈段。

7

7 分找 7 个。

0x8049177 sum R_386_32

~17c

~184

~18c

~192

~1aa 格式化字符串 R_386_32

~1af

注意两点:

  • 重定位地址不是指令地址
  • 函数一般是 PC32,变量是 32

1

4K=12位作为页内偏移,高20位是虚拟页号。

代码段:0x8049 虚拟页,不缺页,因为 main 已经载入过了(说详细一点)

可读写数据段:sum和data的开头0x804c,而data恰好占 16KB 为 4 个虚拟页面。因此会放到 0x804c, 0x804d, 0x804e, 0x804f, 0x8050 这些虚拟页号。

需要分类讨论,讨论首页和尾页是否以前被访问过。不过这里首页肯定被 sum 访问了,因此会有 4 次或 3 次。

2

ar 取得是栈中的地址,对 ar[j] 进行写操作会有一些问题,覆盖掉 main 函数的栈帧空间,导致 main 函数结束之后调用的返回地址会被错误的数据覆盖,因此在 main 函数 ret 之后跳转到对应的地址。

这个地址可能对应一个空洞的页面,因此发出缺页异常,CPU 触发 14 号中断(Page Fault)。内核检查发现该线性地址是非法的(不在任何已定义的段内),于是向进程发送 SIGSEGV 信号。

也有可能对应的段是不可执行的。CPU 触发通用保护异常(General Protection Fault),内核随即终止进程并输出 “Segmentation fault”。

1

主存块大小为 32B,因此有 5 位作为块内偏移。

cache 行数=16KB / 32B=16*1024/32=512 行,共有 9 位作为行索引,剩下为标记位。

512*(+++)

2

161283=6144 次 cache 访问。ar 有一次读,一次写。

data 写,ar 读缺失,ar 写命中,一共 2*4=8 次缺失。

中断类型号可以是 3,也可以是 14,检测响应处理的过程理论课课件上应该都有。

选择题答案:
DBAAC DABAA

posted @ 2025-12-25 10:16  哼唧昂叽  阅读(2)  评论(0)    收藏  举报