首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mov eax,dword ptr [eax]做什么?

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

Stack Overflow用户
提问于 2014-09-04 05:45:35
回答 4查看 28.5K关注 0票数 9

我知道dword ptr是一个size指令,它指示在哪里移动的内容的大小,并且我知道mov eax,eax是nop代码的一种形式,但是这做了什么呢?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-04 05:55:11

指令mov eax, eax可能是一个非操作代码,但是这里不是这样的。您正在从内存中加载,如[]“contents of”字符所示。

它用内存的内容(在本例中是32位的eax )加载eax当前指向的内容。

也许一张图形图片会有帮助:

代码语言:javascript
复制
Before:
    eax:                 0x12345678
    memory @ 0x12345678: 0xffffffff

After:
    eax:                 0xffffffff
    memory @ 0x12345678: 0xffffffff

至于可能的用途,无疑有很多。立即出现的一个是链表结构,其中对于列表中的单个元素(伪程序集)有这样的内容:

代码语言:javascript
复制
next:      word     ?         ; one word.
payload:   byte     ?(32)     ; 32 bytes.

如果将eax用作指向这些元素之一的指针,则获取下一个元素将使用您看到的指令完成:

代码语言:javascript
复制
mov eax, dword ptr [eax]
票数 11
EN

Stack Overflow用户

发布于 2014-09-04 05:52:27

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

在C术语中,它取消引用EAX中最初持有的值如下:"eax = *eax“

票数 16
EN

Stack Overflow用户

发布于 2014-09-04 05:54:19

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25658069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档