没有基址寄存器,qword ptr [hexvalue]是什么意思

Rat*_*tle 9 assembly .net-assembly

我在汇编中调试了CLR代码,并且排成一行

mov rax, qword ptr [ff4053c0h]
Run Code Online (Sandbox Code Playgroud)

我想qword ptr [ff4053c0h]是指我感兴趣的字符串,但ff4053c0h不是有效的内存位置.阅读qword ptr它似乎引用了一个基于基址寄存器的地址(例如qword ptr [rsp+30h],堆栈中有30个字节),但是我找不到没有基址寄存器的含义.

Jos*_*uez 8

如果没有提供基址寄存器,则表示data segment(http://www.osdata.com/system/physical/memory.htm).在您的代码中,mov rax, qword ptr [ff4053c0h]意味着"从数据段偏移FF4053C0h获取8个字节并将它们放入RAX".

正如您所指出的那样,基本寄存器的存在rsp清楚地表明堆栈段.在您的情况下,没有基址寄存器意味着数据段.

现在,关于大数字"FF4053C0h",即"4 282 405 824",完全有可能拥有4Gb的可寻址内存(http://wiki.osdev.org/Protected_Mode),这证实了你的代码行可能是有效的,它在一个巨大的数据段(http://www.ece.unm.edu/~jimp/310/slides/micro_arch2.html)中访问偏移量FF4053C0h .

另一个来源= 汇编:使用数据段寄存器(DS).


小智 6

没有任何理由使事情变得复杂:

这意味着从地址读取64位值0ff4053c0h到寄存器中RAX.

地址必须有效,请再次检查.
QWORD PTR仅仅是一个大小指定(冗余这里,但它提高了可读性),它不具有基址寄存器有关.

如果您真的对CPU具有的各种寻址模式感兴趣,可以阅读英特尔手册(Google).