Jim*_*hJR 2 x86 assembly 32-bit
关于问题答案的快速问题: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
Run Code Online (Sandbox Code Playgroud)
我参加了一个集会课,并且知道了基础知识,而不是寻找什么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)我希望能回答你的问题.在调试器中加载代码并通过逐步执行一条指令并在每一步中转储寄存器和部分内存并将其与变量状态进行比较可能会有所帮助.