簡體   English   中英

如何將內存地址轉換為代碼段地址?

[英]How to convert a memory address to a code segment address?

如何將地址轉換為16位代碼段(CS寄存器)? 例如,如果.text段以00E51000開始,那么如何為該段計算CS寄存器? 此問題特定於32位x86體系結構。

在32位模式下,您可以(通常應該) 始終使用引用以base = 0 / limit = -1引用GDT條目的CS值。 如果您是在主流操作系統下的用戶空間中運行,那么您的過程就已經如此。 實際上,DS / ES / SS將以相同的方式設置,即平面內存模型。 (FS或GS對於線程本地存儲可能具有非零的基數。)

然后,您可以在偏移量= 0x00E51000的那個節/段中引用存儲器。 例如mov eax, 0x00E51234 / jmp eax

在DS / ES / SS也為0 / -1的情況下,您將擁有一個平面內存模型,其中mov eax, [0x00E51234]會加載您要跳轉到的相同字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM