能力值:
( LV2,RANK:10 )
|
-
-
2 楼
一个CPU能够直接操作的内存容量是它的一个重要的性能指标,这个指标取决于CPU芯片的地址信号线的位数。8086有20根地址线,寻址空间可达1M,寄存器只有16位,怎么在16位的机器里表示20位的地址呢?于是就采用了存储器地址分段的办法。
内存地址(物理地址 PA)是通过把一个16位数据(段地址 SA)左移4位(也就是乘以16)再加上一个16位数据(偏移地址 EA)得到的。
PA = SA * 16 + EA
举个例子,2个不同的逻辑地址其实是一个物理地址:
1CBEE = 10FA:BC4E = 1800:4BEE
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
还是有点晕!不过还是谢谢icersg!
支持看雪!
先死记住吧! 物理地址=段地址*16+偏移地址
PA = SA * 16 + EA
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
这个问题其实不是很重要,没弄懂也不怎么影响逆向分析.
现在反汇编的代码,地址都是直接用8位16进制数表示了,
如:00401000 push ebp
也就是说,每个进程都有独立的4G寻址空间(理论上).
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
其实很好理解啊,举个例子。
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B5D ES=0B5D SS=0B5D CS=0B5D IP=0100 NV UP EI PL NZ NA PO NC
0B5D:0100 730B JNB 010D
这里的CS就是段地址,IP就是偏移地址。
CS的值是0B5D,但是他表示的物理地址是0B5D0,上面说的段地址能被16整除指的是0B5D0,而不是CS里面的0B5D
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
谢谢icersg!
听你说清晰许多了
看学真的卧虎藏龙啊!
|
|
|