一些GCC/G++强相关的技巧笔记;
万能头文件
- 只有g++才有这个文件
- 相当于把STL所有头文件都include一次,可看代码:
_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()
函数实现更复杂的程序启动流程;