关于问题答案的快速问题:ESI和EDI寄存器的用途?
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
代码中呢?
只是有点困惑.
我想我们有以下几点:
srcidx
生活在edi
登记册中
argv
是从帧的开始偏移0xc(因此[ebp+0C]
)
j
确实存在ebx
- 我们有时间4的原因是我们正在使用4字节整数数组,因此偏移量必须乘以元素(4)的大小才能得到正确的地址.
srcp
是一个堆栈变量,位于相对于帧开头的偏移-54(ebp
)
我希望能回答你的问题.在调试器中加载代码并通过逐步执行一条指令并在每一步中转储寄存器和部分内存并将其与变量状态进行比较可能会有所帮助.