学习c/c++语言,已经在学校学过了,语言部分略过
重点来看vscode里面怎么把cpp编译成exe,最后再反汇编成asm
前置芝士:GNUGNU 是一个广泛的项目,旨在提供完全自由的操作系统和软件。GDB 和 objdump 是 GNU 项目提供的工具,分别用于程序调试和二进制文件分析。
主要用途:
- GDB 主要用于调试。它允许开发者实时地跟踪和控制程序执行,如设置断点、单步执行代码、查看和修改变量的值等。
- objdump 主要用于分析二进制文件,如反汇编可执行文件或库,查看它们的节信息、符号表等。它是一个静态分析工具,不涉及程序的实际执行。
交互方式:
- GDB 提供了交互式命令行界面,甚至可以通过前端扩展(如 GDB 的图形界面或集成在 IDE 中)来使用,支持交互式调试会话。
- objdump 主要通过命令行参数来使用,输出程序文件的详细信息,不支持交互式操作。
功能集中点:
- GDB 的功能集中在帮助开发者理解程序在运行时的行为,如通过查看栈帧、寄存器状态等来分析程序的运行时错误。
- objdump 的功能集中在对编译后的程序文件(如 ELF 格式的文件)进行静态分析,包括但不限于反汇编、显示二进制文件的各种头信息。
使用场景:
- 当需要动态调试程序,了解程序的运行时行为或查找运行时错误时,GDB 是更合适的选择。
- 当需要查看程序的编译后结构,或在没有源代码的情况下理解程序的行为时,objdump 是更合适的工具。
前置芝士:vscode调试一路窜到底,个人查过网上各种方法,包括不限于更改json文件,安装c/c++其它版本,最后是关闭360才能正常使用
下面提供两种方法,其一是使用gdb在终端显示反汇编代码,其二是使用objdump反汇编生成asm文件,最终都能看到反汇编出来的代码。gdb的动态调试不在此说明,gdb借助图形界面的拓展或集成在IDE中暂时未尝试,以后需要会进行尝试并补充。
方法一:使用objdump反汇编成asm文件:
貌似也可以生成ARM架构的汇编语言,但是Intel架构基本上跟它只是左右互反,浅试以下没成功,就直接用Intel架构看
方法二:使用gdb生成:(转自己文章:滴水逆向黄皮书P1~50_滴水黄皮书-CSDN博客)
看P3顺带学的:
1-转载自:vscode搭建汇编环境_vscodemips-CSDN博客
已配置好同步至我的github仓库:GitHub - DeMaDDemo/MASM-Repo1: 汇编vscode配置仓库,放搞好的配置
2-转载自:使用VS Code把C代码反汇编 - 哔哩哔哩
已会使用,总结在:https://github.com/DeMaDDemo/dishui-reverse/blob/main/2015-01-05/Hello_World.cpp
3-转载自:https://www.cnblogs.com/linear345/p/16116493.html
在终端反汇编(GNU Debugger的命令)
已会使用,总结在:https://github.com/DeMaDDemo/dishui-reverse/blob/main/2015-01-05/Hello_World.cpp
4-不过我们一般反汇编的话用的还是OllyDebug,X64debug,IDA pro会更多一些,也方便一些,(补)图形化工具动态x64debug,静态IDA pro;vscodeGNU工具动态dbg,静态objdump
方法三:或者我们打开调试,直接在堆栈视图处看,动态调试直接跟踪反汇编(那不就成了x64debug?不会啊,在vscode里编好代码直接调试还是方便的,不然难道先编译一遍拿着exe文件丢到x64debug再用也太麻烦了)