如何阅读Visual C ++ 2010生成的程序集输出?

时间:2014-12-25 22:18:29

标签: c++ windows visual-studio-2010 assembly

我有以下C ++代码:

int main()
{
    int i;
    int j;
    i = 1111;
    j = 2222;

    return 0;
}

我想查看此C ++代码编译的汇编代码,因此我选择了以下选项:

enter image description here

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

enter image description here

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我认为(出于教育目的)你应该将这些语句放在一个函数中并从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定义的函数中(假设没有其他定义)。

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