1. 程式人生 > 其它 >gdb應用程式-使用者層的第一條指令

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