可执行二进制文件的形成过程与简单调试
2017-08-31 21:08
281 查看
1) 预处理:主要对源码预编译语句(如宏定义define)和文件包含进行处理。即对宏指令替换和包含文件放置到需要编译的文件中,完成后会生成完整的C程序源文件。
2) 编译:对预处理以后文件进行编译,生成.s后缀的汇编语言文件,即该文件里是汇编语言的代码,汇编是一种更底层的语言,直接对硬盘进行操作。
3) 汇编:对汇编语言文件进行汇编,主要调用汇编处理程序来完成汇编,汇编是生成二进制机器代码的过程,汇编后的文件以.o结尾,称为目标文件。
4) 链接:将多个由汇编生成的目标文件以及引用的库文件进行模块链接,生成一个完整的可执行文件,链接时,所有目标文件被安排在可执行程序的适当位置,同时程序调用的库函数也从各自所在的函数库链接到程序中。
下面演示C语言代码 如何转变成 可执行的二进制文件:
假如现在有段C语言源代码如下
对其进行预处理,处理后的文件如下图所示
生成汇编代码
生成目标文件
链接生成可执行文件
最后一个可执行文件就生成了
下面是gdb调试程序基本使用
写一个简单的c语言程序测试下
生成debug文件
运行gdb,然后载入调试文件a.debug,list 查看源代码
break 设置断点,即运行到第几行,让程序暂停一下
info breakpoint 查看断点,删除断点用delete + Num
run 运行程序,如下图程序会在断点处暂停
输入next 让程序继续运行一行,输入continue 让程序运行到下一个断点为止
在断点处可以打印或者操作变量,对排除bug非常有用,退出则按q键即可
其他高级的用法可以去查阅相关资料,这里就不一一细说了。
2) 编译:对预处理以后文件进行编译,生成.s后缀的汇编语言文件,即该文件里是汇编语言的代码,汇编是一种更底层的语言,直接对硬盘进行操作。
3) 汇编:对汇编语言文件进行汇编,主要调用汇编处理程序来完成汇编,汇编是生成二进制机器代码的过程,汇编后的文件以.o结尾,称为目标文件。
4) 链接:将多个由汇编生成的目标文件以及引用的库文件进行模块链接,生成一个完整的可执行文件,链接时,所有目标文件被安排在可执行程序的适当位置,同时程序调用的库函数也从各自所在的函数库链接到程序中。
下面演示C语言代码 如何转变成 可执行的二进制文件:
假如现在有段C语言源代码如下
对其进行预处理,处理后的文件如下图所示
gcc -E -o a.cxx a.c
生成汇编代码
gcc -S -o a.s a.c
生成目标文件
gcc -c -o a.o a.c
链接生成可执行文件
gcc a.c -o a.out
最后一个可执行文件就生成了
下面是gdb调试程序基本使用
写一个简单的c语言程序测试下
生成debug文件
gcc -g -o a.debug hello.c
运行gdb,然后载入调试文件a.debug,list 查看源代码
break 设置断点,即运行到第几行,让程序暂停一下
info breakpoint 查看断点,删除断点用delete + Num
run 运行程序,如下图程序会在断点处暂停
输入next 让程序继续运行一行,输入continue 让程序运行到下一个断点为止
在断点处可以打印或者操作变量,对排除bug非常有用,退出则按q键即可
其他高级的用法可以去查阅相关资料,这里就不一一细说了。
相关文章推荐
- C语言可执行文件形成的过程
- 利用certutil.exe实现在批处理(bat)中嵌入可执行文件或者各种媒体、图片之类二进制文件的简单方法!
- 浅谈从源代码文件到二进制可执行文件的过程
- 浅谈从源代码文件到二进制可执行文件的过程
- 源代码文件到二进制可执行文件的过程
- 通过一个简单的例子,说明class文件在运行过程中,import中class怎么被加载并执行的
- 浅谈从源代码文件到二进制可执行文件的过程
- VC++ 读取二进制文件以及写入文件简单示例:
- c语言从一个源代码文件到生成可执行文件的过程
- Linux启动过程中几个重要配置文件的执行过程_阿4is痞男-ChinaUnix博客
- c文件到可执行文件运行的过程探索--堆栈中的过程活动记录
- 一个C语言程序到执行完文件的全过程(笔记)
- expect 批量拷贝key文件并且批量执行简单脚本
- Win32可执行文件的开发过程 - Win32汇编语言008
- mysql查看存储过程和执行sql脚本文件到数据库中
- golang 在 windows 下编译出 linux 二进制可执行文件的软件套装合集 [go 1.7.3环境]
- linux下c++编程环境搭建,运行过程以及调试,内含C++头文件源文件编译过程链接
- vs2010调试时,无法找到“XXX.exe”的调试信息,或者调试信息不匹配,未生成二进制文件
- Linux启动过程中几个重要配置文件的执行过程
- Linux 之 /etc/profile、~/.bash_profile 等几个文件的执行过程