首页 > 编程语言 >如何展示C语言源文件的汇编代码文件及其二进制目标代码?

如何展示C语言源文件的汇编代码文件及其二进制目标代码?

时间:2023-02-16 15:37:29浏览次数:37  
标签:汇编 汇编器 rbx 代码 long C语言 源文件 文件

假设一个C语言源文件包含如下函数定义:

long mult2(long, long);

void multstore(long x, long y, long *dest){
	long t = mult2(x, y);
	*dest = t;
}

在命令行上使用"-S"选项, 就能看到C语言编译器产生的汇编代码
linux> gcc -Og -S main.c

image
(对于C++只需将gcc换成g++即可)
这样做后会有一个main.s汇编文件出现在当前文件夹下

  • 汇编代码文件包含各种声明, 包括下面几行:
multstore:
	pushq %rbx
	movq %rdx, %rbx
	call mult2
	movq %rax, (%rbx)
	popq %rbx
	ret

上面代码中每个缩进的行都代表一条机器指令.
比如pushq指令表示应该将寄存器%rbx的内容压入程序栈中

现在我们知道, 所有的cpp/c源文件都是要经过编译才能转化为可执行文件.exe
在它转化为可执行文件之前还需要将汇编文件.s经过汇编器转化为.o的二进制格式的目标代码文件.

上面的汇编文件转化为二进制后再进行16进制转换后就是
53 48 89 d3 e8 00 00 00 00 48 89 03 5b c3
能否反过来根据机器代码产生一种类似与汇编代码的格式呢?

在Linux系统中, 带'-d'命令行标志的程序OBIDUMP可以充当反汇编器的角色
linux> objdump -d mstore.o

  • 此外, 一些关于机器代码和它的反汇编表示的特性值得注意:
  1. 反汇编器知识基于机器代码文件中的字节序列来确定汇编代码. 无需访问该程序的源代码或汇编代码
  2. 反汇编器使用的指令命名规则与GCC生成的汇编带啊使用的有细微的差别.无伤大雅.

标签:汇编,汇编器,rbx,代码,long,C语言,源文件,文件
From: https://www.cnblogs.com/travisfu/p/17126947.html

相关文章

  • 你好 ChatGPT, 帮我看下这段代码有什么问题?
    今天一个很简单的功能,触发了一个BUG,处理后我想起了最近爆火的ChatGPT,于是我尝试测试ChatGPT能否发现这个BUG。这篇文章会先介绍功能代码,然后手动分析BUG原因;接着测......
  • python代码打包exe文件(不带模块)
    一、安装第三方模块pipinstallpyinstaller二、在控制台输入对应命令pyinstaller-Dtas.py#tas.py为py文件名称,自行匹配更改成功后生成三个新文件.spec文件配置......
  • 一个服务器对多个客户端的本地socket通信C语言实现
    对于同一台主机间的多个进程间通信,除了使用共享内存,消息队列等方式,使用本地socket也是很高效的一种选择。不同于网络socket,本地socket不需要指定ip地址,也不需要进行网......
  • C++ 浮点数比较代码
    #include<algorithm>#include<cmath>#include<iostream>//如果a和b之间的差异在a和b中较大者的epsilon百分比以内,则返回trueboolapproximatelyEqualR......
  • 阿里一面:你做过哪些代码优化?来一个人人可以用的极品案例
    前言在尼恩读者50+交流群中,尼恩经常指导小伙伴改简历。改简历所涉及的一个要点是:在XXX项目中,完成了XXX模块的代码优化另外,在面试的过程中,面试官也常常喜欢针对提......
  • 代码随想录算法训练营day22 | leetcode 235. 二叉搜索树的最近公共祖先 ● 701.二叉
    LeetCode235.二叉搜索树的最近公共祖先分析1.0 二叉搜索树根节点元素值大小介于子树之间,所以只要找到第一个介于他俩之间的节点就行classSolution{publicTre......
  • 不用Blazor WebAssembly,开发在浏览器端编译和运行C#代码的网站
    不用BlazorWebAssembly,开发在浏览器端编译和运行C#代码的网站 本文中,我将会为大家分享一个如何用.NET技术开发“在浏览器端编译和运行C#代码的工具”,核心的技术就是......
  • 一封传话一行代码实现微信消息推送
    一行代码实现微信消息推送介绍通过调用一个简单的接口,将要推送的消息提交后,您将在微信收到推送的消息,简单快捷可以应用的场景设备上下线,量化交易,网站公告,服务器异常信息......
  • gitee分支代码推送
    gitee分支代码推送 把本地的代码二次提交到gitee,并创建分支操作:cdYourLocalRepoPath##cd到本地仓库路径下gitinit##仓库初始化gitcheckout-b分支名字##创建......
  • c语言文件读写
    C语言文件读写算法1.fseek()函数此函数用于移动文件指针到指定位置。例如,要将文件指针移动到文件的第5个字节处,您可以使用以下代码:fseek(fp,5,SEEK_SET);//将文件......