两种汇编的实验

week04

  • 一、汇编-1
  • 二、汇编-2

一、汇编-1

1 通过输入gcc -S -o main.s main.c -m32 将下面c程序”week0401学号.c“编译成汇编代码 int
g(int x){
return x+3; } int f(int x){
int i = 学号后两位;
return g(x)+i; } int main(void){
return f(8)+1; }
2. 删除汇编代码中 . 开关的代码,提交f 函数的汇编代码截图,图中用矩形标出函数栈帧的形成和销毁的代码

#include<stdio.h>

int g(int x){
	return x+3;
}

int f(int x){
	int i=31;
	return g(x)+i;
}
int main(void){
	return f(8)+1;
}

使用以下代码进行汇编:

gcc -S -o week040120232831.s week040120232831.c -m32

结果如下:(出错,发现没有用32位编译的包)
在这里插入图片描述
使用代码安装32位的编译包

sudo apt-get install gcc-multilib

在这里插入图片描述
再次编译;
在这里插入图片描述

查看week040120232831.s文件发现,很杂乱:
在这里插入图片描述

因此需要删除多余的辅助代码,而这些辅助代码就是类似“.size”等“.”开头的文件。通过以下代码即可删除所有“.”开头的辅助代码,且删除后的代码如下:

sed -i '/[.]/d' week040120232831.s

在这里插入图片描述
f 函数的汇编代码截图如下:
在这里插入图片描述

用矩形标出函数栈帧的形成和销毁的代码如下:
在这里插入图片描述

二、汇编-2

1 通过输入gcc -S -o main.s main.c 将下面c程序”week0402学号.c“编译成汇编代码
int g(int x){
return x+3;
}
int f(int x){
int i = 学号后两位;
return g(x)+i;
}
int main(void){
return f(8)+1;
}

  1. 参考http://www.cnblogs.com/lxm20145215----/p/5982554.html,使用gdb跟踪汇编代码,在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。提交截图。

代码如下:

#include<stdio.h>

int g(int x){
        return x+3;
}

int f(int x){
        int i=31;
        return g(x)+i;
}
int main(void){
        return f(8)+1;
}

编译代码如下:

gcc -S -o week040220232831.s week040220232831.c

生成week040220232831,并进行gdb,不生成无法进行gdb调试:

gcc -g week040220232831.c -o week040220232831 -m32

在这里插入图片描述
进行gdb调试

gdb week040220232831

在这里插入图片描述
一路按照以下输入进行gdb调试:

b main
r
disassemble
i r
display /i $pc
si
i r
si
x/i $pc
si
x/i $pc
i r
x /4a 0xffffd118
si
x/i $pc
i r
x /4a 0xffffd118 
disassemble

以上即结束,x /4a 0xffffd118中的16进制数是ebp的物理地址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。图如下所示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/279614.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vr体验馆用什么软件计时计费,如遇到停电软件程序如何恢复时间

vr体验馆用什么软件计时计费&#xff0c;如遇到停电软件程序如何恢复时间 一、软件程序问答 如下图&#xff0c;软件以 佳易王vr体验馆计时计费软件V17.9为例说明 1、软件如何计时间&#xff1f; 点击相应编号的开始计时按钮即可 2、遇到停电再打开软件时间可以恢复吗&…

跨域是什么,如何解决跨域

文章目录 前言一、 什么是跨域&#xff1f;二、常见跨域问题三、如何解决跨域如何解决跨域&#xff08;方式&#xff09;前端解决跨域问题CORS反向代理JSONP 总结 前言 跨域是在开发中经常遇到的问题&#xff0c;那什么是跨域呢&#xff1f;及常见跨域的处理方案有哪些呢&…

深入了解云原生:定义与特征解析

文章目录 一、云原生概述1.1 什么是云原生1.2 云原生组成要素1.3 补充资料 二、云原生的目标2.1 云原生关键目标2.2 云原生特性 三、云原生应用 VS 传统单体应用参考资料 一、云原生概述 1.1 什么是云原生 (1)云原生定义 云原生(Cloud Native) 是一种软件架构和开发方法论&a…

D1671 75Ω视频放大驱动芯片 ,2.8~5.5V 应用于手持设备中 内 置 SAG端 子 6dB放 大 器 电 路

D1671 是 一 块 带 4 级 低 通 滤 波 的 单 通 道 视 频 放 大 电 路 &#xff0c; 可 在 3V 或 5V的 低 电 压 下 工 作 。 该 电 路 用 在 有 TV 影 象 输 出 功 能 的 产 品 上 面 &#xff0c; 比 如 机 顶 盒 &#xff0c;监 控 摄 象 头 &#xff0c;DVD &#xff1b;此 …

JSON 详解

文章目录 JSON 的由来JSON 的基本语法JSON 的序列化简单使用stringify 方法之 replacerstringify 方法之 replacer 参数传入回调函数stringify 方法之 spacestringify 方法之 toJSONparse 方法之 reviver 利用 stringify 和 parse 实现深拷贝 json 相信大家一定耳熟能详&#x…

WebGL以及wasm的介绍以及简单应用

简介 下面主要介绍了WebGL和wasm,是除了html,css,js以外Web标准所支持的另外两个大件 前者实现复杂的图形处理,后者提供高效的代码迁移以及代码执行效率 WebGL 简介 首先,浏览器里的游戏是怎么做到这种交互又显示不同的画面的? 试想用我们的前端三件套实现一下.好像可以…

HackTheBox - Medium - Linux - Bagel

Bagel 今天我开始了《Red Team Development and Operations A Practical Guide》的学习&#xff0c;保持学习&#xff0c;后面差不多到时机后就学CRTOⅡ Bagel 是一款中等难度的 Linux 机器&#xff0c;其特点是电子商店容易受到路径遍历攻击&#xff0c;通过该攻击可以获取应…

ZigBee协议栈 -- Zstack协议栈(Zstack2.5.1a)

文章目录 Zstack 协议栈介绍ZStack 的安装ZStack 的结构系统初始化启动操作系统 设备的选择定位编译选项ZStack 中的寻址ZStack 中的路由OSAL 调度管理ZStack 中的串口通信设置配置信道配置 PANID 和要加入的网络最大有效载荷大小非易失性存储器 Zstack 协议栈介绍 CC2530 芯片…

【华为机试】2023年真题B卷(python)-计算最大乘积

一、题目 题目描述&#xff1a; 给定一个元素类型为小写字符串的数组&#xff0c;请计算两个没有相同字符的元素长度乘积的最大值&#xff0c;如果没有符合条件的两个元素&#xff0c;返回0。 二、输入输出 输入描述: 输入为一个半角逗号分隔的小写字符串的数组&#xff0c;2 &…

Collections

Collections Collections四种对集合进行排序的方式 方法名说明public static <T extends Comparable<? super T>> void sort (List<T> list)排序public static void reverse(List<?> list)逆序public static void shuffle(List<?> list)随机…

使用element中el-cascader级联选择器实现省市区街道筛选(非动态加载)

<template><el-form ref"form" :model"form" label-width"80px"><el-form-item label"地址:" prop"addressList"><el-cascaderv-model"form.addressList":props"props":options&q…

golang第一卷---go入门

go入门 对于使用go的好处环境变量配置开发工具 参考网站 &#xff1a;go入门 对于使用go的好处 简单好记的关键词和语法。轻松上手&#xff0c;简单易学。更高的效率。比Java&#xff0c;C等拥有更高的编译速度&#xff0c;同时运行效率媲美C&#xff0c;同时开发效率非常高。…

分布式技术之数据分布方式

文章目录 数据分布设计原则数据分布方法哈希一致性哈希带有限负载的一致性哈希带虚拟节点的一致性哈希四种数据分布方法对比 在分布式系统中&#xff0c;具体是如何实现数据索引或数据分布的呢&#xff1f;目前最常用的方法就是哈希和一致性哈希。 数据分布设计原则 数据分布…

swift-碰到的问题

如何让工程不使用storyboard和scene 删除info.plist里面的Application Scene mainifest 删除SceneDelegate.swift 删除AppDelegate.swift里面的这两个方法 func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession…

2012年第一届数学建模国际赛小美赛B题大规模灭绝尚未到来解题全过程文档及程序

2012年第一届数学建模国际赛小美赛 B题 大规模灭绝尚未到来 原题再现&#xff1a; 亚马逊是地球上现存最大的雨林&#xff0c;比地球上任何地方都有更多的野生动物。它位于南美洲大陆的北侧&#xff0c;共有9个国家&#xff1a;巴西、玻利维亚、厄瓜多尔、秘鲁、哥伦比亚、委…

竞赛保研 基于卷积神经网络的乳腺癌分类 深度学习 医学图像

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

ppp会话建立的第二阶段:ppp认证

ppp认证的两种协议&#xff1a; pap 密码认证协议&#xff1a;是一种简单的明文认证&#xff0c;使用两次握手建立身份验证。如果碰到动态攻击&#xff0c;pap认证不会断开。一旦pap认证通过&#xff0c;就不会断开chap 挑战握手验证协议&#xff1a;通过三次握手的方式进行MD…

redis的主从复制和哨兵模式

redis的集群&#xff1a; 高可用方案&#xff1a; 持久化高可用 主从复制 哨兵模式 集群 主从复制&#xff1a;主从复制是redis实现高可用的基础&#xff0c;哨兵模式和集群都是在主从复制的基础之上实现高可用。 主从复制实现数据的多机备份&#xff0c;以及读写分离(主…

强化学习第一课 Q-Learning

解决问题&#xff1a;从任何位置到6 视频课程地址&#xff1a; 强化学习算法系列教程及代码实现-Q-Learning_哔哩哔哩_bilibili 相应代码&#xff1a; import numpy as np import randomq np.zeros((7, 7)) q np.matrix(q)r np.array([[-1, -1, -1, 0, -1, -1, -1],[-1, …

SpringBoot 日志打印

一. 自定义打印日志 开发者自定义打印日志实现步骤: • 在程序中得到日志对象 • 使用日志对象的相关语法输出要打印的内容. 得到日志对象: //日志工厂需要将需要打印的类的类型传递进去,这样我们才知道日志的归属类,才能更方便的定位到文体类 private static Logger logger …