gdb應用程式-使用者層的第一條指令
參考:
starti 在第一條指令處停下來
https://www.cnblogs.com/zhangzhiwei122/p/15811300.html
連結與裝載 interrupter 直譯器
https://blog.csdn.net/u011734326/article/details/101028881
問題:
linux環境下可執行檔案 - 使用者層程式碼的第一條指令從哪兒開始執行?
interpreter 直譯器
第一條指令並不是 main 開始 的,
1、對於單獨的一個elf格式的檔案【可執行檔案,或者動態連結庫檔案】,其入口通過readelf -h xxx 可以檢視到
2、對於 有 interpreter 的可執行檔案,由 interpreter 負責執行它。即 使用者層的第一條執行指令是 interpreter 的指令。
示例
如上圖,這是一個具有 interpreter 的程式,其由 /lib64/ld-linux-x86-64.so.2 負責裝載執行。
/lib64/ld-linux-x86-64.so.2 符號連結到 /lib/x86_64-linux-gnu/ld-2.31.so 上面
/lib/x86_64-linux-gnu/ld-2.31.so 再沒有 interpreter 了。
通常 ld.so 被稱作 動態裝載器,就是因為它基本上是 所有 應用層程式的 interpreter 。
入口
拷貝/lib/x86_64-linux-gnu/ld-2.31.so 為 ld.so [備用】
cp/lib/x86_64-linux-gnu/ld-2.31.so ./ld.so
readelf & objdump ld.so 的入口
gdb starti 的第一條指令
上圖中,紅色框 內的 機器碼 和 ld.so 入口處的一致,表示其為 使用者從程式的 第一條指令。
linux 核心 怎麼到第一條使用者層指令的?
參考
連結與裝載 interrupter 直譯器
https://blog.csdn.net/u011734326/article/details/101028881