我使用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
...
答案 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