我認爲「調用」指令是一種「跳轉」指令。 「跳轉」指令有地址去哪裏。 而「call」指令應該有一個目標地址。 但是,當我拆解二進制文件時,「call」指令只具有目標函數的標籤。那麼,他們如何知道去哪裏?換句話說,我在哪裏可以找到每個函數的目標地址? x86,ARM不管。「調用」指令位置的地址
-1
A
回答
2
彙編程序設計中的地址通常標有一些符號名稱。這不僅適用於通話指示,而且適用於所有其他指示。
這種方法有一個原因 - 地址總是取決於程序在內存中的加載位置。此外,某些指令不包含地址本身,而是包含相對於執行程序的當前地址的偏移量。
另一方面,程序員通常不關心地址的確切值。他只想知道這個地址的位置。這就是使用符號標籤的原因。
使用具有有意義名稱的符號標籤可以提高源代碼的可讀性並使程序易於支持和擴展。
這些符號地址(標籤)在將源代碼組裝到可執行二進制文件期間被轉換爲數字。
根據可執行的格式,有時翻譯是部分的 - 只計算相對於代碼開頭的偏移量。這些都是所謂的「可重新定位」標籤。
稍後,當操作系統將二進制文件加載到內存中的某個特定地址時,所有可重定位地址都將被固定,以便獲取加載二進制文件的正確數值。
這種方法對於動態加載庫(DLL)很常見,因爲每次將庫加載到內存中時,加載地址都是未知的(並且是不同的)。
相關問題
- 1. C指令地址
- 2. 地址位置
- 3. 地址和地理位置地址
- 4. IP地址位置
- 5. mips是否有32位地址和32位指令?
- 6. nginx位置指令
- 7. NGINX位置指令相同的位置
- 8. 獲取地址的位置
- 9. 指針中的哪個位置地址引用
- 10. 使用位置指令時沒有網址更改
- 11. 嘗試使用地理位置打印當前位置地址
- 12. 計算JMP指令的地址
- 13. 獲取x86當前指令的地址
- 14. 獲取C/C++指令的地址
- 15. 通過指令集編碼的指令地址
- 16. 地址或位置標識
- 17. 調用完成後指針指向的位置返回被破壞的變量的地址?
- 18. 卡在nginx位置指令
- 19. 位置指令被忽略?
- 20. Nginx忽略位置指令?
- 21. nginx別名+位置指令
- 22. 如何指定axis2-java2wsdl-maven-plugin中的地址位置?
- 23. 顯示位置萬歲用戶地址
- 24. MIPS:J格式指令和地址編碼
- 25. 確定86 MONITOR指令地址範圍
- 26. AVX2指令集 - 加載地址計算
- 27. 機器指令和內存地址
- 28. 大會跳轉指令地址計算
- 29. 爲什麼不使用32位ARM指令地址的2個LSB
- 30. html5地理位置和地址
_「但是當我拆開二進制文件時,」call「指令只有目標函數的標籤。」_這是反彙編程序爲了讓拆卸更容易閱讀而做的。 「call」指令的實際機器碼序列將包含目標地址(可以是相對或絕對的)。 – Michael 2015-04-01 15:06:11
你應該看到沒有什麼區別,反彙編跳轉或呼叫。 – Jester 2015-04-01 15:06:41
爲什麼不在拆解和詢問這些問題之前閱讀一些書 – 2015-04-01 15:53:57