C程序编译、调试和运行工具的使用
一、安装所需要的包
sudo apt-get update
sudo apt-get install libc6-dev-i386
sudo apt-get install gdb
sudo apt-get install build-essential
二、gcc基本命令的使用
(一)分步操作
1.预处理 .c ⇒ .i
gcc -E hello.c -o hello.i
2.编译 .i ⇒ .s
gcc -S hello.i -o hello.s
3.汇编 .s ⇒ .o
gcc -c hello.s -o hello.o
4.链接 .o ⇒ 可执行文件
gcc hello.o -o hello
(二)一步完成
gcc hello.c -o hello
(三)命令参数
gcc -m32 -O0 -g -no-pie hello.c -o hello
-m32 生成x86-32的指令
-O0 不优化
-g 带调试信息,如果后续需要调试程序的话必须加此参数
-no-pie 关闭装载至随机地址
三、objdump 反汇编
objdump -S hello.o>hello.txt
objdump -S hello>hello.txt
四、gdb调试
对可执行文件test进行调试
1.启动gdb调试工具 gdb test
2.在主函数入口处设置断点break main
3.启动并运行已加载的程序run
或r
4.查看所有寄存器内容i r
5.查看某个寄存器(以eip为例)内容i r eip
6.查看某些寄存器内容i r esp ebp eax
7.向下继续执行一条机器指令si
8.执行一条c语句s
9.退出调试quit
或q