linux相关工具

linux编译、链接工具:gcc, as,ld

调试工具:gdb

自动编译工具:make


void main()

{
printf("hello!\n");
return;
}

编译过程:

1. gcc hello.c -o hello

2. ./hello


反汇编过程:

1. gcc hello.c -g -o hello

2. objdump -s -d ./hello

在gcc编译时加上-g是为了添加调试信息,objdump中的-s选项是为了在显示汇编代码时同时显示原来的C语言源代码。


gcc编译选项: gcc [options] [filenames]

-c 生成目标文件.o,通常用于编译不包含主程序的子程序文件

-o 确定输出文件的名称

-g 产生符号调试工具(gdb)所必要的符号资讯,要想对源代码进行调试,就必须加上这个选项。


test.h

int iterate(int value);

test.c

int iterate(int value)
{
if(1 == value)
return 1;
return iterate(value - 1) + value;
}


hello.c
void main()
{
printf("%d\n",iterate(10));
return;
}

静态生成:

(1)首先生成*.o文件,输入 gcc -c test.c -o test.o

(2) 利用ar命令生成静态库,输入ar rc libtest.a test.o

执行文件生成:

(1) 输入gcc hello.c -o hello ./libtest.a

(2) 输入./hello,验证生成的执行文件是否正确

(3) 可以删除libtest.a文件,重新输入./hello,验证执行执行文件是否可以正常运行。


生成动态库:

gcc -shared -fPIC -o libtest.so test.c

生成可执行文件:

(1) gcc hello.c -o hello ./libtest.so

(2) ./hello

(3) 删除libtest.so,然后输入./hello,看看系统是否返回错误


使用gdb进行调试

既然需要调试,那么首先要生成包含调试信息的可执行文件

输入:gcc test.c -g -o test

调试的步骤基本如下:

(1) 首先,输入gdb test,进入gdb的调试界面;

(2) 输入list,可看到test.c源文件

(3) 输入b main,设置断点在main处

(4) 输入run,启动test程序

(5) 因为在main开始的地方设置了断点,所以程序在printf处断处,这时,可以单步跟踪,s单步可以进入函数,而n单步而越过函数

(6) 如果希望从断点处继续运行程序,输入c

(7) 希望程序运行到函数结束,输入finish

(8) 查看断点信息,输入info break

(9) 如果希望查看堆栈信息,输入bt

(10) 希望查看内存,输入x/64 + 内存地址

(11) 删除断点,则输入delete break + 断点序号

(12) 希望查看函数局部变量的数值,可以输入 print + 变量名

(13) 希望实时打印变量的数值,可以输入 display + 变量名

(14)  查看函数的汇编代码输入 diassemble + 函数名

(15) 退出调试输入 quit即可



你可能感兴趣的:(linux,汇编,gcc,delete,工具,filenames)