4
A
回答
4
當跳轉到一個FWORD PTR,你所做的是「遠程跳轉」 - 也就是說,所指向的存儲器包含一個16位「選擇器」(指的是GDT或LDT中的段入口)和一個32位偏移量從選擇器引用的段開始。段描述符包含關於段的數據,當然包括它在內存中的起始位置。
在跳轉過程中,CPU做一些權限檢查以確保選擇是有效且被允許(有權限級別和細分種類和參與),然後將其有效地加載前16位爲CS,其餘爲EIP。從那時起,代碼地址可以有效地獲得CS段的基地址,並將它們轉換爲虛擬地址。
2
遠程跳轉使用完整段基址:偏移值作爲絕對地址,所以它由16位段和32位地址組成。 它執行跳轉到位於與當前代碼段不同的段中的指令,但它應該處於相同的特權級別。
相關問題
- 1. 如何解釋 「JMP DWORD PTR [REL $ 00005e52]」?
- 2. C asm jmp在執行jmp後返回jmp
- 3. JMP FAR
- 4. ptr = free(ptr),NULL安全嗎?
- 5. 是什麼*(&PTR)和*(PTR)
- 6. C指針:* ptr ++或*(ptr +1)
- 7. x86 jmp註冊
- 8. NASM jmp wonkiness
- 9. JMP組裝
- 10. 爲什麼* ptr ++的行爲像*(ptr ++)而不是(* ptr)++?
- 11. 指針 - 傳遞PTR到PTR或路過的PTR
- 12. C/C++指針,ptr + 1 = ptr +1字節或ptr + 1 * sizeof(pointer_type)?
- 13. C++雙PTR到長的ptr轉換
- 14. SomeClass ** ptr之間的區別;和SomeClass * ptr;
- 15. 鑄造到派生類ptr到ptr
- 16. 投射(PTR爲const)至(PTR到UINT8)
- 17. (ptr + i) - > Func()和&ptr [i] .Func()
- 18. ptr =&a和* ptr =意思是否一樣?
- 19. 添加JMP指令
- 20. ASM x86相對JMP
- 21. 當我調用jmp
- 22. 組裝相對JMP/CALL工具/插件的絕對JMP/CALL?
- 23. char * ptr結構
- 24. 對於(* ptr)[],爲什麼printf(「%p」,(void *)ptr + 1)有效但不是printf(「%p」,ptr + 1)?
- 25. JMP如何在此程序中返回給調用者?
- 26. `jmp`到擴展段訪問衝突
- 27. 計算JMP的操作碼
- 28. x86-64相對jmp性能
- 29. JMP中的Java堆大小
- 30. Flex/bison中的JMP指令
啊。說得通。沒有意識到__WORD PTR被視爲邏輯地址。 –