- x86匯編與逆向工程:軟件破解與防護的藝術
- (美)斯蒂芬妮·多馬斯 (美)克里斯托弗·多馬斯
- 445字
- 2025-02-10 16:05:46
2.6.5 基址-索引尋址
基址-索引尋址組合了索引尋址和基址加偏移量尋址的元素。它使用一個基址寄存器、一個索引寄存器、一個比例因子(1、2、4或8)和一個偏移量進行尋址。
例如,地址[ebx+edi*4+0x1000]的基址存儲在ebx中,索引存儲在edi中,并且偏移量為0x1000。
示例:結構體
基址-索引尋址對于訪問嵌套數據類型的元素來說是非常理想的。例如,C語言命令struct {int i; short a[4];} s;創建了一個包含多個字段的結構體(struct),其中包括一個數組。
這個結構體中的每個元素都位于特定的偏移位置,這意味著數組a有一定的偏移量或基址。然而,a中包含的元素也各自有相對這個基址的不同偏移量。
假定結構體s的基址存儲在ebx中,并且數組a存儲在離此基址4字節的地方。如果n存儲在ecx中,那么下面的指令將訪問a中的第n個元素:

如果你覺得更高級的尋址方式難以理解,不用太挫敗。操作系統一直在隱藏內存,所以思考數組在內存中的存儲方式是一個全新的領域。這些尋址模式首先需要作為理論引入,但在你開始在實際的匯編代碼中看到它們被使用以前,它們理解起來可能會比較困難。但別擔心,你終將會理解的。