首页 > 编程语言 >反汇编训练1

反汇编训练1

时间:2023-04-06 16:25:27浏览次数:30  
标签:汇编 训练 代码 C++ rbp eax add 反汇编

以下是一个C++函数,以及该函数的汇编代码:

```cpp
int add(int a, int b) {
return a + b;
}

// 汇编代码
_Z3addii:
push %rbp
mov %rsp,%rbp
mov %edi,-0x4(%rbp)
mov %esi,-0x8(%rbp)
mov -0x8(%rbp),%eax
add -0x4(%rbp),%eax
pop %rbp
retq
```

将汇编代码转换回C++代码的步骤如下:

1. 了解C++代码和汇编代码之间的关系。汇编代码是C++代码的翻译,因此您需要了解每个汇编指令对应的C++代码的含义。

2. 通过对整段汇编代码进行注释和解释,更好地理解每个指令的作用。例如,在上述代码中,第一条指令`push %rbp`的作用是将ebp寄存器的值保存在堆栈中。

3. 分析汇编代码中的每个寄存器和堆栈变量,并将它们映射到C++函数中的变量。例如,在上述代码中,-0x4(%rbp)对应a,-0x8(%rbp)对应b,%eax对应返回值。

4. 分析每个汇编指令,并将其翻译为C++代码。例如,在上述代码中,`add -0x4(%rbp),%eax`的作用是将-0x4(%rbp)(即变量a)加到eax(即返回值)中。

5. 整理代码,保证生成的C++代码与原始的C++代码等价。例如,在上述代码中,C++函数add的实现很简单,只有一句return a + b;。因此,在将汇编指令`add -0x4(%rbp),%eax`翻译为C++代码时,只需要将它替换为return a + b;即可。

下面是将汇编代码转换回C++代码的示例:

```cpp
int add(int a, int b) {
int ret = 0;
__asm__ (
"addl %%ebx, %%eax;"
: "=a"(ret)
: "a"(a), "b"(b)
);
return ret;
}
```

上述代码使用了__asm__关键字,嵌入了汇编代码。它将汇编代码中的变量a、b和eax(返回值)映射到C++代码中的变量a、b和ret。

当C++代码调用add函数时,编译器将调用嵌入的汇编代码,将C++参数a和b传递给ebx和eax寄存器;嵌入的汇编代码将ebx寄存器的值加到eax寄存器并存放到ret变量中。

 

标签:汇编,训练,代码,C++,rbp,eax,add,反汇编
From: https://www.cnblogs.com/creaker/p/17293133.html

相关文章

  • 反汇编训练2
    以下是一个汇编程序,请转换为等效的C++代码:```assemblysection.textglobal_start_start:moveax,2;操作码:0xB8,参数:0x02movebx,3;操作码:0xBB,参数:0x03addeax,ebx;操作码:0x01,参数:0xC3movecx,eax......
  • Leetcode(剑指offer专项训练)——DP专项(7)
    矩阵中的距离题目:给定一个由0和1组成的矩阵mat ,请输出一个大小相同的矩阵,其中每一个格子是mat中对应位置元素到最近的0的距离。两个相邻元素间的距离为1。链接TLS思路题解暴力DFS的结果是超时......
  • yolov5训练自己的数据
    前一篇文章写了如何的安装yolo5。基于上面的一章,记录下用yolo5来训练自己的数据。split_train_val.pyimportosimportrandomtrainval_percent=0.1train_percent=0.9xmlfilepath='/Users/Tony/IdeaProjects/yolov5/data/mydata/xml'txtsavepath='/Users/Tony/IdeaP......
  • 一维CNN,二维CNN以及三维CNN的训练模型matlab仿真
    1.算法描述卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(FeedforwardNeuralNetworks),是深度学习(deeplearning)的代表算法之一。卷积神经网络具有表征学习(representationlearning)能力,能够按其阶层结构对输入信息进行平移不变......
  • 使用 diffusers 训练你自己的 ControlNet
    简介ControlNet这个神经网络模型使得用户可以通过施加额外条件,细粒度地控制扩散模型的生成过程。这一技术最初由AddingConditionalControltoText-to-ImageDiffusionModels这篇论文提出,并很快地风靡了扩散模型的开源社区。作者开源了8个不同的模型,使得用户可以用8种......
  • 算法训练——剑指offer(动态规划算法)摘要
    摘要一、动态规划原理与解题方法二、动态规划算法练习题目2.1跳台阶问题package动态规划算法;importorg.junit.Test;/***@ClassnameJZ69跳台阶问题*@DescriptionTODO*@Date2022/2/1118:54*@Createdbyxjl*/publicclassJZ69跳台阶问题{/**......
  • 基于mnist手写数字数据库的深度学习网络训练和数字识别matlab仿真
    1.算法描述        MNIST数据集(MixedNationalInstituteofStandardsandTechnologydatabase)是美国国家标准与技术研究院收集整理的大型手写数字数据库,该数据集包含60000 个于训练的样本和10000 个于测试的样本,图像是固定⼤小(28x28像素),每个像素的值为......
  • 【ACM算法竞赛日常训练】DAY10题解与分析【月月给华华出题】【华华给月月出题】| 筛法
    DAY10共2题:月月给华华出题华华给月月出题难度较大。......
  • 算法训练——剑指offer(模拟算法)
    摘要一、模拟算法原理与解题方法二、模拟算法练习题目2.1顺时针打印矩阵顺时针打印矩阵_牛客题霸_牛客网解题思路:递归的思想和非递归的思想相差不大,递归是首先打印最外层的元素,将内层的矩阵作为一个全新的矩阵进行递归。对于每层,从左上方开始以顺时针的顺序遍历所有元素。假设当......
  • 算法训练——剑指offer(排序算法)摘要
    摘要一、排序算法原理与解题方法二、排序算法练习题目2.1数组中重复的数字数组中重复的数字_牛客题霸_牛客网package排序算法;importjava.util.ArrayList;/***@ClassnameJZ3数组中重复的数字*@DescriptionTODO*@Date2022/2/49:20*@Createdbyxjl*/publi......