以下有三段完整或者不完整的 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;
深入理解计算机系统期末考试题目的一道题,求大家帮忙看看!
答案:2 悬赏:20 手机版
解决时间 2021-02-20 18:16
- 提问者网友:十年饮冰
- 2021-02-19 19:08
最佳答案
- 五星知识达人网友:舍身薄凉客
- 2021-02-19 19:18
其实看懂也不怎么样,
只能说明你对计算机机理结构方面有一定的理解了。
学习靠积类,并不是一本书就能解决所有问题的。
多思考,多实践,必定有所获。
希望能帮到你,满意,欢迎追问。
只能说明你对计算机机理结构方面有一定的理解了。
学习靠积类,并不是一本书就能解决所有问题的。
多思考,多实践,必定有所获。
希望能帮到你,满意,欢迎追问。
全部回答
- 1楼网友:慢性怪人
- 2021-02-19 19:33
六进制,23
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯