有趣生活

当前位置:首页>科技>怎么做汇编代码经验分享如何查看C

怎么做汇编代码经验分享如何查看C

发布时间:2026-07-21阅读(1)

导读想要真正的理解一段代码到底是怎么执行的,还是要从汇编的层面去看,那怎么得到一段c代码所对应的汇编代码呢,下面为你介绍三种方式。1.gcc编译生成XXX.s文....

想要真正的理解一段代码到底是怎么执行的,还是要从汇编的层面去看,那怎么得到一段c 代码所对应的汇编代码呢,下面为你介绍三种方式。

1. gcc编译生成XXX.s文件

一般来讲,给你一个cpp文件,比如test.cpp,然后我们编译都是直接g test.cpp这样简单直接的方式,但其实它中间有很多个过程的,包含预处理、编译、链接等过程,而这其中的编译这个过程其实就是生成了汇编文件。

比如对于一个cpp文件,我们执行下列命令:

g -E test.cpp -o test.i #预处理过程g -S test.i -o test.s #编译过程

这样生成test.s就是test.cpp所对应的汇编代码,当然我们也可以一步到位,直接使用g -S test.cpp -o test.s也是可以的。

2. 使用objdump命令得到汇编代码

linux下的objdump命令用于从可执行文件或者目标文件中显示某些信息,所以用它也可以得到可执行文件对应的汇编代码。

比如对于test.cpp,可以使用如下的命令得到汇编指令:

g test.cpp -o testobjdump -d test

通过这样的方式能看到可执行文件所对应的汇编指令。

3. 使用gdb命令得到汇编代码

第1、2两种情况下得到的都是编译期间生成的汇编指令,但因为有些代码是运行时才能确定的原因,所以运行时的汇编指令与编译时并不完全一致,比如栈的地址,编译期间其实是不知道的,运行时才会真正的分配。

我们可以使用gdb来获取每一行代码运行时所对应的汇编指令,首先使用g -g test.cpp -o test来得到可执行文件,然后gdb ./test进入gdb模式,比如对于这段c 代码:

#include <iostream>using namespace std;int main(){ int size = 1000; size = 10000; int arr[size]; return 0;}

使用如下gdb命令可得到对应的汇编指令:

(gdb) b mainBreakpoint 1 at 0x4006a4: file test.cpp, line 10.(gdb) set disassemble-next-line on #打开汇编指令开关,这样gdb每执行一步,都会打印出来对应执行的汇编指令(gdb) rStarting program: /root/a.out Breakpoint 1, main () at test.cpp:1010 return 0;=> 0x00000000004006a4 <main() 8>: 48 89 e0 mov %rsp,%rax 0x00000000004006a7 <main() 11>: 48 89 c1 mov %rax,%rcx(gdb) next6 int size = 1000;=> 0x00000000004006aa <main() 14>: c7 45 fc e8 03 00 00 movl $0x3e8,-0x4(%rbp)(gdb) 7 size = 10000;=> 0x00000000004006b1 <main() 21>: c7 45 fc 10 27 00 00 movl $0x2710,-0x4(%rbp)

这样看起问题来就很方便了,我们能看到每一行c 代码对应的汇编指令是什么,对于初学者而言,使用此种方式是最为方便的。

好了,本篇文章就为大家介绍到这里,觉得内容对你有用的话,记得支持一下哟!

如果你也喜欢编程,想好C/C 的话!如果你也想让自己成为一个具有真材实料的厉害的程序员,不妨从现在开始!

编程学习书籍分享:

编程学习视频分享:

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C 感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C 的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图