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路径后问题解决。

posted @ 2018-10-21 15:00  20189205黄铸君  阅读(202)  评论(1编辑  收藏  举报