GCC与G++

一些GCC/G++强相关的技巧笔记;

万能头文件

1
#include <bits/stdc++>

_start()

在GCC中,程序的实际入口点是__start()函数,而其中又会调用__libc_start_main(),再在其中调用main()

因此,下面的代码也可以作为独立程序成功编译:

1
2
3
4
5
void _start()
{
int a = 0, b = 5;
a = b + 1;
}

objdump输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
Disassembly of section .text:

0000000000000000 <_start>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
b: c7 45 f8 05 00 00 00 movl $0x5,-0x8(%rbp)
12: 8b 45 f8 mov -0x8(%rbp),%eax
15: 83 c0 01 add $0x1,%eax
18: 89 45 fc mov %eax,-0x4(%rbp)
1b: 90 nop
1c: 5d pop %rbp
1d: c3 ret

可以通过自定义__start()函数实现更复杂的程序启动流程;

评论