一、配置编译器环境变量
1.下载mingw64
MinGW 的全称是:Minimalist GNU on Windows ,MinGW 就是 GCC 的 Windows 版本 。
MinGW-w64 与 MinGW 的区别在于 MinGW 只能编译生成32位可执行程序,而 MinGW-w64 则可以编译生成 64位 或 32位 可执行程序。
MinGW-w64是2005年为了将ObjectiveC程序移植到64位Windows问题,由OneVision Software根据 净室设计原则 (ReactOS是一个逆向工程Windows而净室实现的开源操作系统)而独立开发。
下载链接:https://sourceforge.net/projects/mingw-w64/files/
解压mingw64(即MinGW-w64)压缩包,放到合适的位置,找到文件夹内的一个叫bin的文件夹,复制该文件夹地址(右键文件夹地址找到复制地址)
2.编辑环境变量
进入“设置”,在设置中搜索“环境变量”,点击进入“编辑系统的环境变量”
点击“环境变量”,进入后选择“Path”,双击进入,点击“新建”,将bin的路径粘贴进去,保存
3.测试配置结果
最后测试环境配置是否成功,Win键+R打开运行窗口,输入cmd,回车,在命令行窗口输入gcc -v -E -x c++ -
如果运行结果如下,即配置成功。
二、编译
样例代码:test02.c
#include<stdio.h>
int sum2(int a,int b)
{return a+b;
}
int sum1(int a,int b)
{return sum2(a,b);
}
int main()
{int x=1;int y=2;sum1(x,y);return 0;
}
输入下面指令(同Linux系统,唯一的不同在于.out可执行文件换成了.exe可执行文件):
.out文件通常与Unix和Linux相关,是在这些操作系统下编译后的可执行文件扩展名。它们不包含特定于操作系统的元数据,因为Unix/Linux环境不需要额外的元数据来识别可执行文件。相对地,.exe文件是Windows系统中的可执行文件扩展名,表示这些文件包含程序代码和数据,可以在Windows计算机中直接执行。
gcc test02.c -o test02.exe
这里注意,如果后续需要执行文件,Linux系统下是./test02,而Windows系统下是.\test02
三、gdb查看反汇编代码
然后输入下面指令,进行gdb调试(可以使用 -q,更加简洁)
gdb -q 是GDB(GNU调试器)的一个启动选项。当使用此选项启动GDB时,它会在安静模式下运行,不会在启动时显示版权说明或广告式的说明信息。这有助于在调试过程中减少不必要的输出,使调试界面更加简洁。
gdb -q test02
输入下面指令,反汇编名为main
的函数。命令会显示出main
函数的机器码指令,以及对应的汇编指令
disassemble main
包括sum1函数和sum2函数也都可以查看
同样的,在vscode中调试查看方法也是一样,但是得预先配置好C语言环境,包括c_cpp_properties.json
、launch.json
、tasks.json等文件
四、总结
最后总结一下Windows系统下查看C语言文件反汇编和Linux的相同点和不同点:
相同点:
编译命令:无论是在Windows还是Linux,使用GCC编译源代码的基本命令是相似的。例如,编译一个名为
main.c
的C语言源文件到可执行文件,通常使用gcc main.c -o main
这样的命令。GDB基本调试命令:GDB在Windows和Linux环境下都提供了一套相似的调试命令集,如
start
、next
、step
、break
、run
等,用于控制程序的执行流程、查看变量值、设置断点等。disassemble命令:在GDB中,使用
disassemble
命令来查看函数的反汇编代码是通用的,不论是在Windows还是Linux环境下。不同点:
环境配置:在Windows下,可能需要安装额外的工具或包来支持GCC和GDB的使用,如MinGW或Cygwin。而在Linux下,GCC和GDB通常是预装的,或者可以通过包管理器轻松安装。
路径分隔符:Windows使用反斜杠
\
作为路径分隔符,而Linux使用正斜杠/
。因此,在指定源文件或可执行文件的路径时,需要注意使用正确的分隔符。终端界面与功能:Windows的命令行界面(CMD)和Linux的终端(如bash)在功能和外观上有所不同。Linux的终端通常提供了更强大的文本处理能力和更丰富的命令行工具集。
可执行文件格式:虽然GCC在Windows和Linux下都可以生成可执行文件,但文件的格式是不同的。Windows下通常是
.exe
文件,而Linux下是没有扩展名的可执行文件。特定于平台的命令和选项:虽然GCC和GDB的基本命令集在Windows和Linux下是相似的,但可能存在一些特定于平台的命令或选项。这些命令或选项可能针对特定操作系统的特性或限制进行设计。