20189205 《Linux核心原理與分析》第二週作業
阿新 • • 發佈:2018-11-07
反編譯
在實驗樓中我編寫了如下程式碼:
通過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路徑後問題解決。