20189205 《Linux内核原理与分析》第二周作业
反编译
在实验楼中我编写了如下代码:
通过gcc编译,得到了如下汇编代码:
将其简化为可见部分后可得到如下汇编代码:
5 g:
8 pushl %ebp
11 movl %esp,%ebp
13 movl 8(%ebp),%eax
14 addl $666,%eax
15 popl %ebp
18 ret
24 f:
27 pushl %ebp
30 movl %esp,%ebp
32 subl $4,%esp
33 movl 8(%ebp),%eax
34 movl %eax,(%esp)
35 call g
36 leave
39 ret
45 main:
48 pushl %ebp
51 movl %esp,%ebp
53 subl $4,%esp
54 movl $9205,(%esp)
55 call f
56 addl $2018,%eax
57 leave
60 ret
运用本周视频所教,对此段代码进行分析,可以发现其堆栈结构变化如下:
分析堆栈变化,可以看出此段代码的功能是进行9205+666+2018的运算。
问题与处理
在完成本周测试时出现了以下问题:
测试5 在调用动态库libmymath.so用gcc编译后,可执行程序运行时shell报错说无法找到共享库:
经过在网上查阅资料,发现原因是生成的动态库不在系统默认的库文件夹中,使用mv将动态库libmymath.so移动到/usr/lib路径后问题解决。