对访问字符串中字符的反汇编中的解引用操作感到困惑

问题描述

我在理解此操作在汇编中的工作方式时遇到了一些麻烦。我有一个我编写并反汇编的程序。在其中,我访问字符串的单个字符并将其与测试字符串进行比较。我感到困惑的代码的重要部分在这里

mov     ecx,[ebp+string_offset]
add     ecx,[ebp+counter_offset]
movsx   edx,byte ptr [ecx]

我猜这是通过一些编译器优化生成的。代码的实际功能是有意义的。 ECX 被赋予一个地址,计数器被添加到它(以增加内存中的位置),然后 MOVSX 加载 ECX 指向的字节。

我感到困惑的是这里的括号。通常括号是解引用操作。因此,如果这是真的,ECX 将包含字符串的第一个 actual 元素。然后,我们将取消引用计数器,并将其添加到 ECX 以获​​取我们想要的元素,最后将该元素加载到 EDX 中进行比较。

这没有任何意义,因为如果取消引用字符串的地址会返回字符串本身,那么添加计数器只会产生无意义的结果。确实,在调试过程中,ECX 将包含字符串中字符的实际地址,然后 EDX 将包含字符本身。

这是括号的非标准使用还是我缺少的 c 字符串 (Char* xyz = "test") 作为数组的特殊用法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)