如何阅读由Visual C ++ 2010生成的汇编输出?【JAVA教程】

!
也想出现在这里? 联系我们
信息

如何阅读由Visual C ++ 2010生成的汇编输出?,第1张

概述如何阅读由Visual C ++ 2010生成汇编输出?

我有以下C ++代码:

int main() { int i; int j; i = 1111; j = 2222; return 0; }

我想查看这个C ++代码编译的汇编代码,所以我select了以下选项:

该选项将输出每个C ++语句,并在其下面直接显示它所对应的汇编指令。 但是有一些C ++语句不符合任何Assembly指令(例如: int i; )。 所以我想在阅读生成的汇编代码时确保以下假设是正确的:

windows上的Unix应用子系统如何在程序集中实现系统调用?

如何在linux中打败core i3 / i7中的硬件预取器

如何find一个C程序的“退出”

程序集x86中的Math.h库函数?

NASM增加了注册BUG的价值

如何步deBUGging没有符号或部分的程序集二进制文件?

将符号从.globl改为.weak有什么后果?

英特尔指令的LOCK前缀。 有什么意义?

生成一个PE格式的可执行文件

从C的议论到议会

int i; int j; 只是变量声明..他们甚至没有被声明初始化,因此在这个意义上,这两行没有明确的汇编指令。但是请注意,局部变量声明确实导致了这些局部变量的分配在堆栈上。

是的,对于你的问题的后半部分, mov DWORD PTR_i$[ebp],1111只对应于i = 1111; 。

我认为(为了教育目的),你应该把这些语句放在一个函数中,然后调用函数main(main函数):

sub esp,216 ; 000000d8H

变为:

sub esp,192 ; 000000c0H

和:

lea edi,DWORD PTR [ebp-216]

变为:

lea edi,DWORD PTR [ebp-192]

发生的是这些指令是为i和j保留堆栈中的内存。 所以有机器指令(除了通常的其他值之外,它们总是在那里),但是你需要了解正在发生的事情以理解指令是什么。 216值将被用在包含i和j定义的函数中(假设没有其他定义)。

请注意,为“i”设置值的mov指令使用ebp寄存器。 该寄存器指向堆栈。 所以我认为你可以认为指令是唯一的指令。

总结

以上是内存溢出为你收集整理的如何阅读由Visual C ++ 2010生成的汇编输出?全部内容,希望文章能够帮你解决如何阅读由Visual C ++ 2010生成的汇编输出?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞149 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容