gcc编译器及gdb调试器入门

gcc编译器

  • 概念:
    *gcc是GNU编译器套件(GNU Compiler Collection),它包括了C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由
  • 环境:Linux
  • gcc常用选项

gcc编译器及gdb调试器入门_第1张图片
ps:记住几个打钩的常见即可。

  • 编译:和其他编译器大同小异在这里插入图片描述
  • 常见操作
    1== 有一个.c源程序时,
    gcc xxx.c
    完成编译

2==完成编译后,产生的可执行文件 .out默认 ---- a.out
执行:./a.out
执行成功

3==指定名字的执行
gcc -o xxx.c hello.c
生成后u,运行 ./hello / *不用.c也能运行 */

4.==对于.o文件
gcc hello.o -o hello
生成可执行文件

  • 警告信息提示功能
    就像windows上的编译器在编译时的报错功能一样,
    示例:
    gcc -pedantic warning-code.c -o warning_code
    如果有错误时,会提示出来!!!
    正确时,就不报错了,直接编译成功!

  • gcc代码优化
    常用指令 -On
    n一般是(1-3)
    每高一级证明优化的越厉害!
    常用 -O2

gdb

  • 概念:
    UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。

  • 常用操作

1==
gdb filename
调用该可执行文件的调试

2==
gdb
进入

quit
退出

3==
常见命令
gcc编译器及gdb调试器入门_第2张图片
ps:
gcc可以编译出有错误的文件,但是,在运行的时候会出错。

此处错误代码
:
#include
int main()
{
	int i;
	printf("Input an integer :");
	scanf("%d",i);//错误在此处
	printf("%d",i);
	return 0;
}

在这里插入图片描述
这个时候就可以祭出gdb,

==

gdb simple_gdb

进入,起来了,开始·调试,

(gdb)run

-run出现错误,

然后gdb会出现错误的,
会报错出出现错误的第一个地方,
会给出相应的地址,
gcc编译器及gdb调试器入门_第3张图片
知道错误地址后,

backtrace 跟踪,
然后,
就会出现每一行代码的每一行地址,
然后再根据报错的那个地址去找对应行的地址
frame 3
这个是根据那个错误所在的地址,
然后退出
用
vi
去修改代码了

好了,看完了一个睿智程序的简单调试之后,我们再来看看难一点的,

gcc编译器及gdb调试器入门_第4张图片
对这个进行调试,
用来进行最简单的几个操作,(如断点什么的)

break命令用法
gcc编译器及gdb调试器入门_第5张图片
//断点的运行一向是调试的关键
ex:

break main
就在main处的地址停下来了
单步运行
s

print命令:
gcc编译器及gdb调试器入门_第6张图片

重载一下刚才的那个程序
gcc编译器及gdb调试器入门_第7张图片

print num_1

输出

$1=-99

可以查看一些数据

  • 查看源代码
list指令

gcc编译器及gdb调试器入门_第8张图片
看内存地址:
gcc编译器及gdb调试器入门_第9张图片
示例:
在这里插入图片描述

  • 看机器码(汇编代码)
    disassemble xxx
    gcc编译器及gdb调试器入门_第10张图片
    学的差不多了
    昨天做的一条逆向学的gdb使用,
    还挺好用

你可能感兴趣的:(ctf)