icc汇编的汇编中的“#x.x”是什么意思?

时间:2019-09-21 10:48:00

标签: c intel icc

我使用intel icc编译器来编译简单的代码,并且我注意到每行的末尾都有一些数字。我想知道意思。

就像下面的代码中的#3.12

#include <stdio.h>

int main() {
    int a = 3, b;
    scanf("%d", &b);
    a = a + b;
    printf("Hello, world! I am %d\n", a);
    return 0;
}
...
main:
..B1.1:                         # Preds ..B1.0
                                # Execution count [1.00e+00]
..L1:
                                                          #3.12
        pushl     %ebp                                          #3.12
        movl      %esp, %ebp                                    #3.12
        andl      $-128, %esp                                   #3.12
...

2 个答案:

答案 0 :(得分:2)

确实是相应源代码的行和列。 #3.12是主要函数的开头{,这很有意义,因为显示的语句与函数的开头一致。

如果在{之前插入多余的空格,则会看到输出更改为#3.13;同样,如果您在3函数之前插入空行,则4会变为main()

答案 1 :(得分:0)

这是准备函数开始的过程,也称为函数头。在这里,我们将返回地址隐藏在堆栈上,并在堆栈上分配空白空间以使函数正常工作。最后要注意的是逆向过程。这是另一个编译器的示例:

        push    ebp
        mov     ebp, esp
        sub     esp, 8
        ...
        mov     esp, ebp
        pop     ebp
        ret     0