1. 程式人生 > >20189205 《Linux核心原理與分析》第二週作業

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路徑後問題解決。