mov eax,dword ptr [eax]做什么?

use*_*243 4 assembly ollydbg

据我所知,dword ptr是一个大小指令,表示移动内容的大小,我知道mov eax,eax是一种nop代码,但是这样做有什么作用?

认为它将eax的地址与里面的十六进制值交换,但我不太确定甚至不知道为什么会发生这种情况.

小智 7

它使用EAX最初指向的DWORD值加载EAX.

在C术语中,它取消引用最初在EAX中保存的值,如下所示:"eax =*eax"

  • +1代表_“取消引用”_指针,在我看来这是最简单的正确答案 (2认同)

pax*_*blo 7

说明:

mov eax, eax
Run Code Online (Sandbox Code Playgroud)

可能是一个nop代码,但这不是你在这里的.您正在从内存加载,如[]"contents-of"字符所示.

它加载eax与所述内容的存储器(32位dword当前被指出,在这种情况下)eax.

也许图形图片会有所帮助:

Before:
    eax:                 0x12345678
    memory @ 0x12345674: 0xeeeeeeee
                      8: 0xffffffff
After:
    eax:                 0xffffffff
    memory @ 0x12345674: 0xeeeeeeee
                      8: 0xffffffff
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一下,这种从指针寄存器加载 a 到自身的方法经常在链接数据结构(例如链接列表)中找到,因为它允许编译器将单个寄存器用作“当前元素”指针。 (2认同)

Rim*_*mas 5

dword ptr [eax]- 指向内存,其地址为eax,因此该语句将32位值从内存复制到eax