【发布时间】:2016-04-04 23:06:31
【问题描述】:
关于问题答案的快速提问:Purpose of ESI & EDI registers?
srcp [srcidx++] = argv [j]; C code translates too
8B550C mov edx,[ebp+0C]
8B0C9A mov ecx,[edx+4*ebx]
894CBDAC mov [ebp+4*edi-54],ecx
47 inc edi
我上过汇编课并且知道基础知识,而不是寻找 mov 的含义,但我最困惑的是 +0C、+4*ebx 和 ebp+4*edi-54 语句是什么为了。他在帖子中解释了它,但我仍然不明白。
ebp+12 有argv,但为什么要增加 12?
ebx 是j,但为什么要乘以 4 并加到 ebp 上?
他说“第三条指令使用edi乘以4并加上ebp偏移0x54(srcp的位置)”;为什么它必须乘以4?
他还说添加偏移量;为什么代码中是-54 而不是+54?
有点困惑。
【问题讨论】:
-
我认为存在乘以 4 是因为 argv 的类型是 4 字节(例如 int)。
-
你的问题已经解释过了here