1
A
回答
2
相對呼叫用於內部模塊調用,調用直接存儲器地址當然是可能的,但(這是與WinAPI的功能相當多的完成):
FF15 B8401301 CALL DWORD PTR DS:[<&MSVCR100.printf>] ; \printf - note this calling with a pointer to the abs address stored in the IAT
這主要是由於這樣的事實: windows dll不能被重新分配(再加上他們坐在一個特殊的地址空間,因爲每個應用都有自己的'系統dll'視圖),但用戶dll可以很容易地重新分配(尤其是使用ASLR)。 see wikipedia's article on this as well.
此外,不要混淆間接符號表調用(也稱爲模塊間調用)與純粹的相對調用。如果你調用當前模塊之外的功能,你會得到存儲在符號表中的絕對地址相對呼叫:
CALL MySymb
MySymb: JMP &MySymbAbs
或更好的,真實世界的版本:
6FC019E9 E8 300D0000 CALL <JMP.&Storm.#501> ; CALL 6FC0271E without name labeling
6FC0271E - FF25 8071C06F JMP DWORD PTR DS:[<&Storm.#501>] ; Storm.#501
所有這些在很大程度上取決於您的編譯器,有些我會直接調用符號來處理所有事情,有些只會在系統dll和/或COM接口上執行。
只是順便說一句,在32位x86上,你在技術上沒有4GB可用的用戶級應用程序,通常3GB。
相關問題
- 1. ASM x86相對JMP
- 2. 關於F#CTP我應該知道些什麼?
- 3. MIPS asm相當於x86 dup
- 4. 我應該知道什麼對於不良和LINQ更好?
- 5. 從MIPS切換到x86彙編時應該知道什麼?
- 6. 學習STL應該知道什麼關於C++?
- 7. 關於開發64位應用程序,我應該知道些什麼?
- 8. x86彙編程序員轉換爲MIPS,我應該知道什麼?
- 9. 關於C++中的結構化異常(SEH)我應該知道些什麼?
- 10. 我應該用什麼UML圖表示套接字對話?
- 11. 我應該知道什麼來開發p2p小應用程序
- 12. 我們什麼時候知道我們應該使用符號?
- 13. 誰應該知道對方?
- 14. 每個程序員應該知道什麼關於硬件內部?
- 15. 關於MVC責任的另一篇帖子,誰應該知道什麼?
- 16. 我怎麼知道是什麼的UnsafeNativeMethods.DispatchMessageA通話使用的WinDbg在做什麼?
- 17. 什麼是Android對話框通知?
- 18. 我需要知道什麼時候應該使用wp_redirect()?
- 19. 我應該知道什麼是頂級js lib/framework/tool?
- 20. JUnit Developer轉移到TestNG。我應該知道什麼?
- 21. 銷售源代碼,我應該知道什麼
- 22. 開發人員設計師 - 我應該知道什麼?
- 23. 我開始使用Git之前應該知道些什麼?
- 24. 我應該知道什麼函數來測試php代碼?
- 25. 不知道我應該在這裏使用接口,但是什麼?
- 26. 關於NSAttributes,我如何知道那裏有什麼屬性
- 27. MSVC內聯asm中的相對接近跳轉(需要掛鉤)
- 28. 套接字如何工作,以及我應該通過路由器進行連接時知道些什麼?
- 29. 大會x86 Win32
- 30. Java接口,通用的,不知道我在做什麼