概述如何阅读由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生成的汇编输出?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容