【问题标题】:Is "MOV DWORD ptr ds:[ECX], ECX" equivalent to "MOV DWORD ptr ds:ECX, ECX"“MOV DWORD ptr ds:[ECX], ECX”是否等同于“MOV DWORD ptr ds:ECX, ECX”
【发布时间】:2016-08-08 06:16:32
【问题描述】:

如果ECX持有指向结构或数组的指针,则MOV DWORD ptr ds:[ECX], ECX等价于MOV DWORD ptr ds:ECX, ECX

我附上了这张图片:

当我第一次看到那句话时,它让我思考,如果它确实是在高级语言环境中:

1) 指向一个函数的指针,该函数什么都不做,而是调用自身,从而实现递归。

2) x 数据类型的数组/结构,其第一个索引是指向数组/结构本身或结构/数组的第一个条目的指针。 因此我在标题中提出了问题

除此之外,在我看来这很随意:(存储所述地址的值的地址发生在地址本身?)。有什么想法吗?

【问题讨论】:

  • 如果您不能花时间将一些文本 as text 复制到您的问题中,我不会花时间阅读问题标题以外的内容。 mov dword ptr [ecx], ecx 是一家商店。 mov ecx,ecx 是一个 reg-reg 移动,并且是一个无操作,因为它将 ecx 移动到自身。 MOV DWORD ptr ds:ECX, ECX 可能是语法错误。
  • @Peter,“如果您不能花时间将一些文本作为文本复制到您的问题中,那么我不会花时间阅读问题标题以外的内容” ----- - 如果连提问者的内容都懒得点击查看,那回答有什么意义呢?并非所有问题都适合像您这样的人,而是适合那些有兴趣帮助提问者的人。不必要的评论对任何人都没有帮助。让我们保持专业!!!!图像中的汇编代码中有一个上下文。在它旁边是一个图像。所以复制是不可能的。
  • 阿里安,彼得是对的。请将您的代码文本粘贴到您的问题中。
  • @PeterCordes 回答了您的问题。基于此,您应该能够找出您在问题底部发布的两个问题的答案。
  • MOV EDI, EDIexplained by Microsoft 。它的存在是为了进行热补丁。

标签: arrays pointers assembly x86 reverse-engineering


【解决方案1】:

在 MASM 下,MOV DWORD ptr ds:[ECX], ECX 不等同于 MOV DWORD ptr ds:ECX, ECX,因为前者在语法上有效,而后者则无效。

至于你的其他问题:

1) 如果函数指针存储在 ECX 中,则该指令将修改函数,这在大多数操作系统下通常是不允许的,因此会导致崩溃。即使写入被允许,它也会在函数开始时更改指令或指令,当执行时不会做任何有用的事情并且可能会崩溃。它永远不会导致递归。

2) 大概是这样的。

这对我来说并不随意。

【讨论】:

    猜你喜欢
    • 2013-03-05
    • 2023-03-29
    • 2015-01-25
    • 2014-10-28
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2020-09-11
    • 2020-04-16
    相关资源
    最近更新 更多