首页 > 试题广场 >

图3-41是一个函数的(不太好的)实现,这个函数从标准输入读

[问答题]

图3-41是一个函数的(不太好的)实现,这个函数从标准输入读入一行,将字符串复制到新分配的存储中,并返回一个指向结果的指针。

考虑下面这样的场景。调用过程get_line,返回地址等于0x400076,寄存器 %rbx等于0x0123456789ABCDEF。输入的字符串为“0123456789012345678901234”。程 序会因为段错误(segmentation fault)而中止。运行GDB,确定错误是在执行get_line 的ret指令时发生的。

A.填写下图,尽可能多地说明在执行完反汇编代码中第3行指令后找的相关信息。 在右边标注出存储在栈中的数字含意(例如“返回地址”),在方框中写出它们的十六进制值(如果知道的话八每个方框都代表8个字节。指出%rsp的位置。记住,字符0〜9的ASCII代码是0x3〜0x39。

00  00  00  00  00  00  40 00 76





B. 修改你的图,展现调用gets的影响(第5行)。

C. 程序应该试图返回到什么地址?

D. 当get_line返回时,哪个(些)寄存器的值被破坏了?

E.除了可能会缓冲区溢出以外,get_line的代码还有哪两个错误?

这道题你会答吗?花几分钟告诉大家答案吧!