前言
本篇文章是2020南京大学"操作系统: 设计与实现"的课程笔记。这里说一句蒋炎岩老师讲的太好了。课程内容详见B站。本文章记录的内容主要是课程中学到的命令和工具,方便自己在日常生活中使用理解。记录的内容只是课程的一部分。
一、什么是可执行文件
可执行文件也是字节序列,我们可以用cat命令去查看这个文件,当然这个时候,我们看到的是乱码。乱码的原因是可执行文件的编码格式和文本编码格式不一样。可执行文件的编码格式是ELF。
ELF是一种文件格式,可执行可链接格式(Executable and Linkable Format)。我们可以在/usr/include/elf.h这个路径下找到对这个文件的定义。
我们可以用xxd这个命令去查看文件的十六进制形式。
注意到main这个可执行文件的刚开始有0x45,0x46,0x4c这几个字节序列对应的ASCII刚好是ELF。
二、查看ELF文件
1.objdump
查看反汇编代码
objdump -d main
查看反汇编代码对应的源代码。(需要有debug段,gcc -g main.c)
objdump -S main
2.readelf
显示头部信息
readelf -h main
显示加载信息
readelf -l main
三、调试
可以用gdb调试工具调试。
- starti 从第一条指令开始执行
- layout asm 显示反汇编代码
- layout src 显示源代码
- info register 查看寄存器信息
- bt 查看堆栈信息
- 具体操作查看gdb手册