关于问题答案的快速提问: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
,{{1 ,+4*ebx
语句适用于。他在帖子中解释了这一点,但我还是不理解。
ebp+4*edi-54
有ebp+12
,但为什么会增加12?
argv
为ebx
,但为什么会乘以4并添加到j
?
他说"第三条指令使用ebp
乘以4,并edi
偏移ebp
(0x54
的位置)&#34 ;;为什么它必须乘以4?
他还说添加偏移量;为什么代码中有srcp
而不是-54
?
有点困惑。
答案 0 :(得分:5)
我认为我们有以下内容:
srcidx
位于edi
注册argv
位于距离帧开头的偏移量0xc处(因此[ebp+0C]
)j
确实在ebx
中 - 我们有时间4的原因是我们正在使用4字节整数数组,因此偏移量必须乘以元素的大小(4 )获得正确的地址。srcp
是一个堆栈变量,位于偏离-54相对于帧的开头(ebp
)我希望能回答你的问题。在调试器中加载代码并通过逐步执行一条指令并在每一步中转储寄存器和部分内存并将其与变量状态进行比较可能会有所帮助。