当前位置:  开发笔记 > 编程语言 > 正文

为什么这个C代码产生这个程序集

如何解决《为什么这个C代码产生这个程序集》经验,为你挑选了1个好方法。

关于问题答案的快速问题: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*ebxebp+4*edi-54陈述是为了什么.他在帖子中解释了这一点,但我仍然不理解.

ebp+12argv,但为什么它由12会增加吗?

ebxj,偏偏是,乘以4,然后加到ebp

他说"第三条指令使用edi乘以4并加上ebp偏移量0x54(位置srcp)"; 为什么它必须乘以4?他还说添加了偏移 ; 为什么-54不在+54代码中呢?

只是有点困惑.



1> Sasha Pachev..:

我想我们有以下几点:

srcidx生活在edi登记册中

argv是从帧的开始偏移0xc(因此[ebp+0C])

j确实存在ebx- 我们有时间4的原因是我们正在使用4字节整数数组,因此偏移量必须乘以元素(4)的大小才能得到正确的地址.

srcp是一个堆栈变量,位于相对于帧开头的偏移-54(ebp)

我希望能回答你的问题.在调试器中加载代码并通过逐步执行一条指令并在每一步中转储寄存器和部分内存并将其与变量状态进行比较可能会有所帮助.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有