永发信息网

深入理解计算机系统期末考试题目的一道题,求大家帮忙看看!

答案:2  悬赏:20  手机版
解决时间 2021-02-20 18:16
以下有三段完整或者不完整的 C 程序段,题目给出了它们对应
的汇编代码,请利用你掌握的 C 语言和汇编语言知识,采用逆向工程的
思维,回答下面的问题。
(1) 请将下面这段缺失的 C 代码填写完整(8 分)。
C 代码:
unsigned mystery1(unsigned n) {
if (
)
return 1;
else
return 1 + mystery1(
);
}
汇编代码:
mystery1:
pushl %ebp
movl %esp, %ebp
subl
cmpl
jne
$8, %esp
$0, 8(%ebp)
.L2
movl $1, -4(%ebp)
jmp .L3
.L2:
.L3:
movl 8(%ebp), %eax
shrl %eax
movl %eax, (%esp)
call
addl
mystery1
$1, %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
leave
ret
(2) 考虑下面数组访问的 C 程序,假设其 H 和 J 值已先行定义:
int array1 [H][J];
int array2 [J][H];
void copy_array (int x, int y) {
array2 [y][x] = array1 [x][y];
}
第2页(共9页)

假设上述 C 代码运行于某 x86-64 位的机器上,其汇编代码如下:
# on entry:
#
#
#
%edi = x
%esi = y
copy_array:
movslq %esi, %rsi
movslq %edi, %rdi
leaq
addq
(%rsi, %rsi, 8), %rdx
%rdi, %rdx
movq %rdi, %rax
salq
4, %rax
subq
addq
%rdi, %rax
%rsi, %rax
movl array1(, %rax, 4), %eax
movl %eax, array2(, %rdx, 4)
ret
问:该数组的行值 H 和列值 J 分别为多少?(8 分)
H =
J =
(3) 考虑 switch 语句的某种实现,采用 jmpq 指令(64 位机器)来实现转
跳转表的操作:
0x40047b jmpq *0x400598(, %rdi, 8)
利用 GDB 工具查看内存中的跳转表:
0x400598: 0x0000000000400488
0x4005a8: 0x000000000040048b
0x4005b8 0x000000000040049a
0x4005c8: 0x000000000040049a
0x0000000000400488
0x0000000000400493
0x0000000000400482
0x0000000000400498
下面是该 switch 语句的汇编代码:
# on entry: %rdx = c and %rsi = b
0x400474: cmp
0x400477: ja
$0x7, %edi
0x40049a
0x400479: mov
%edi, %edi
0x40047b: jmpq *0x400598(, %rdi, 8)
0x400482: mov
0x400487: retq
0x400488: sub
$0x15213, %eax
$0x5, %edx
第3页(共9页)

0x40048b: lea
0x400492: retq
0x400493: mov
0x400498: and
0x40049a: lea
0x40049d: retq
0x0(, %rdx, 4), %eax
$0x2, %edx
%edx, %esi
0x4(%rsi), %eax
请将以下 C 代码填写完整,C 中的 switch 由上述跳转表实现(14 分)。
int main (int a, int b, int c) {
int result = 4;
switch (a) {
case 0:
case 1:
;
case:
;
break;
case:
result =
break;
;
case 3:
;
;
;
case 7:
default:
}
return result;
最佳答案
其实看懂也不怎么样,
只能说明你对计算机机理结构方面有一定的理解了。
学习靠积类,并不是一本书就能解决所有问题的。
多思考,多实践,必定有所获。
希望能帮到你,满意,欢迎追问。
全部回答
六进制,23
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我们家刚搬家,鸽子会不会飞回我原来的家?
美国大平原的人与华北平原的人生产生活会有哪
汽车前挡风玻璃下方多孔处起何作用
天福量贩我想知道这个在什么地方
当麻和桐人的人气 我只想知道当麻和桐人谁的
索泰显卡 技嘉显卡 哪个质量好?
桂枝汤原方服法要求服已须臾,啜热稀粥一升余
时尚客牛排地址在什么地方,想过去办事
会声会影为什么打不开百度云下载来的视频
谁知道这是什么阀门?用什么工具可以打开? 1
哪里有专门招收残疾人的工厂?详细地址在哪里
舒城小兰花茶叶2016清明前采摘多少钱一斤
在电视上登陆yy账号,显示登录失败是怎么回事
管理信息系统区别于事务处理系统,它更强调(
常州大学石油化工学院这个地址在什么地方,我
推荐资讯
某校用水360吨,节约用水活动后六月份比五月份
靠感动在一起的不是爱情是愧疚对吗?
【言人人殊】成语:()人人()
电视上广告的葛洪药膏是不是真的
镶牙要多少钱一个最便宜的
男,62岁。10年前体检曾被告知患心脏病,近1
进游戏后鼠标移动速度会变回去
冯记削面地址在哪,我要去那里办事
打印材料黑子底上面的字打印不出来是怎么回事
患者,男,33岁。突发畏寒、发热及右上腹胀痛
【中国加入世界贸易组织的时间】我国于什么时
手机卡久不用了变空号了,那手机卡再插入手机
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?