Linux下常用的关于文件的gcc的命令

本文详细介绍了C语言编程中的关键操作,包括创建和编译文件、条件编译、汇编操作、使用GDB调试器以及调试选项,帮助读者掌握从源码到可执行文件的完整流程。
摘要由CSDN通过智能技术生成

一、对filename的相关操作

1、编写一个文件

        vim filename.c

2、指定输出的可执行文件名为filename

        gcc filename.c -o filename

3、对filename进行输出

        ./filename

4、使用gcc编译.c文件生成可执行文件

        gcc -o filename.exe filename.c

5、生成.out(相当于windows下的.exe文件)

        gcc filename.cpp -o filename.out

6、条件编译

        条件编译可以在编译的时候从几组语句中选择一组编译而忽略其它组

        #ifdef/#ifndef...#else...#endif

       (1) 这个结构可以根据一个宏名称是否被定义过从两组语句中选择一组编译。 

        (2)最开始的预处理指令应该从两个里选择一个,不论选择哪个都应该在后面写一个宏名称。

        (3)如果最开始的预处理指令选择#ifdef就表示后面的宏名称被定义的时候编译前一组语句,否则编译后一组语句。

        (4)如果最开始的预处理指令选择#ifndef效果和#ifdef刚好相反。

如:针对#ifdef   #endif对于下面这段代码:

#include<stdio.h>
int main(){
#ifdef YI
	printf("YI!");
#else
	printf("NO!");
#endif
	return 0;
}

如果在编译的时候输入命令 gcc ifdef.c,则输出的结果为NO!

如果在编译的时候输入命令gcc -DYI ifdef.c,则输出的结果为YI!

        注:gcc -D是使用gcc编译时用来定义宏的

如:针对#ifndef   #endif对于下面这段代码:

#include<stdio.h>
int main(){
#ifndef YI
	printf("YI!\n");
#else
	printf("NO!\n");
#endif
	return 0;
}

如果在编译的时候输入命令gcc -DYI ifdef.c,则输出的结果为No!

如果在编译的时候输入命令 gcc ifndef.c,则输出的结果为YI

二、对生成的filename进行汇编操作

5、使用objdump反汇编可执行文件,并将程序的反汇编输出重定向到disassembly.txt文件中。

        objdump -d filename.exe > disassembly.txt

6、将.c文件生成对应的汇编.s文件

        gcc -S filename.c -o filename.s

7、查看gcc版本

        gcc-v

8、在编译时关闭堆栈保护:

        gcc -g filename.c -o filename -z execstack -fno-stack-protector

三、使用GDB调试器

9、编译代码时需要包含调试信息

        gcc -g -o mfilename filename.c

10、打开GDB调试器

        gdb filename

11、在GDB中设置断点

        (gdb) break 10  # 在源代码第10行设置断点

        (gdb)break main#在main函数头处设置断点

        (gdb)info break#显示所有断点

12、在gdb下运行程序

        (gdb) run

13、单步执行

        (gdb) step  # 进入函数内部
        (gdb) next  # 执行下一行代码,跳过函数

14、查看寄存器

        (gdb) info registers #显示所有的寄存器

        (gdb) p $rax #查看单个寄存器(rax)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值