main参数传递、反汇编、汇编混合编程

week03

  • 一、main参数传递
  • 二、反汇编
  • 三、汇编混合编程

一、main参数传递

参考 http://www.cnblogs.com/rocedu/p/6766748.html#SECCLA
在Linux下完成“求命令行传入整数参数的和”

注意C中main: int main(int argc, char *argv[]), 字符串“12” 转为12,可以调用atoi()

求和函数 int sum(int N)放入sum.c中, main中调用sum(),main放入main.c中

测试代码传入自己的8位学号

提交代码

附件提交运行测试截图

// main.c:#include<stdio.h>
#include<stdlib.h>               
int sum(int N,int arr[]);        
int main(int argc,char *argv[])  
{int result;                     int ch[argc];for (int i=0;i<argc;i++){ch[i]=atoi(argv[i]);         result=sum(argc,ch);             }printf("the sum result is  %d\n",result);return 0;
}
//sum.c:int sum (int N,int arr[])
{int a=0;for(int i=0;i<N;i++){a+=arr[i];}return a;
}

创建两个文件
在这里插入图片描述
一起编译,然后运行

gcc main.c sum.c -o 20232831./20232831 2 0 2 3 2 8 3 1 #即计算2 0 2 3 2 8 3 1 的和,需要用空格分开

在这里插入图片描述

二、反汇编

编辑、编译、运行附图中代码
上方提交代码
附件提交运行结果截图
在这里插入图片描述
代码如下:

#include<stdio.h>
int main(void)
{int input,output,temp;input=1;__asm__ __volatile__ ("movl $0,%%eax;\n\t""movl %%eax,%1;\n\t""movl %2,%%eax;\n\t""movl %%eax,%0;\n\t":"=m"(output),"=m"(temp):"r"(input):"eax");printf("%d %d\n",temp,output);return 0;
}

在这里插入图片描述

三、汇编混合编程

用objdum -d sum.o反汇编sum.o, 在main.c中通过汇编调用sum

上方提交C混合汇编代码

附件提交编译运行结果

sum.c和main.c代码如下:

//sum.c:
int sum (int N,int arr[])
{int a=0;for(int i=0;i<N;i++){a+=arr[i];}return a;
}
//main.c:
#include<stdio.h>
#include<stdlib.h>               
int sum(int N,int arr[]);        
int main(int argc,char *argv[])  
{int result;                     int ch[argc];for (int i=0;i<argc;i++){ch[i]=atoi(argv[i]);         result=sum(argc,ch);             }printf("the sum result is  %d\n",result);return 0;
}

过程如下:

先生成sum.o

gcc -c sum.c -o sum.o

在这里插入图片描述

对sum.c的反编译代码如下:

objdump -d sum.o

在这里插入图片描述
根据反汇编的代码对sum.c进行修改,修改如下:

#include<stdio.h>
int sum (int N,int arr[])
{int a=0;for(int i=0;i<N;i++){__asm__ __volatile__ ("mov $0x0,%%rax;\n\t"  "mov %%rax,%%rbx;\n\t" "start_loop:\tsub $0x1,%%rcx;\n\t"   "cmp $0x0,%%rcx;\n\t"    "jl loop_exit;\n\t"  "mov (%%rsi,%%rcx,4),%%rbx;\n\t"  "add %%rbx,%%rax;\n\t"   "jmp start_loop;\n\t"  "loop_exit:":"=a"(a):"b"(arr),"c"(N):"memory");}return a;
}

对sum.c修改后,再次编译运行,结果如下:
在这里插入图片描述
完成汇编混合编程!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

两种汇编的实验

week04 一、汇编-1二、汇编-2 一、汇编-1 1 通过输入gcc -S -o main.s main.c -m32 将下面c程序”week0401学号.c“编译成汇编代码 int g(int x){ return x3; } int f(int x){ int i 学号后两位&#xff1b; return g(x)i; } int main(void){ return f(8)1; } 2. 删除汇编代码…

『番外篇六』SwiftUI 取得任意视图全局位置的三种方法

概览 在 SwiftUI 开发中,利用描述性代码我们可以很轻松的构建各种丰富多彩的视图。我们可以设置它们的大小、位置、颜色并应用不计其数的修改器。 但是,小伙伴们是否想过在 SwiftUI 中如何获取一个视图的全局位置坐标呢? 在本篇博文中,您将学到如下内容: 概览1. SwiftU…

守护 C 盘,Python 相关库设置

文章目录 前言Python 相关查看所有 Python 安装位置查看 Python 依赖位置查看 conda 配置查看 env 列表移除指定 env创建 env进入 env删除环境位置目录添加环境位置 (将位置置顶)查看 pip 缓存位置设置 pip 缓存位置 其他进入 Temp修改位置 Python技术资源分享1、Python所有方向…

(001)Unit 编译 UTF8JSON

文章目录 编译 Dll编译报错附录 编译 Dll 新建工程&#xff1a; 注意 UnityEngineDll 的选择&#xff01;2022 版本的太高了&#xff01;&#xff01;&#xff01; 下载包&#xff0c;导入unity : 3. 将 unf8json 的源码拷贝到新建的工程。 4. 编译发布版本&#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 前言 &…

mongoose中http server服务器解决“Access-Control-Allow-Origin mongoose”跨域问题

问题 使用mongoose做http服务器&#xff0c;自己构造的浏览器端jquery在访问server时&#xff0c;会遇到&#xff1a; Access to XMLHttpRequest at http://127.0.0.1:8000/ from origin null has been blocked by CORS policy: No Access-Control-Allow-Origin header is pr…

python+django大自然环境保护宣传网站62r9b

本课题使用Python语言进行开发。基于web,代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中 本系统由后台管理子系统&#xff0c;登录子系统&#xff0c;按登陆角色及权限划分为管理员:个人中心&#xff0c;用户管理&#xff0c;文…

遇到DDOS怎么办,盾真的可以抗攻击吗

网络在以难以想象的速度发展&#xff0c;黑客们针对网络漏洞发起的攻击也从未停止&#xff0c;但复杂的网络环境让网络安全的维护更为艰难&#xff0c;如果游戏公司没有做好防御措施&#xff0c;黑客发起攻击只是时间问题。在网络攻击愈加多元化的今天&#xff0c;游戏行业可以…

懒加载的el-tree中没有了子节点之后还是有前面icon箭头的展示,如何取消没有子节点之后的箭头显示

没有特别多的数据 <template><el-tree:props"props":load"loadNode"lazyshow-checkbox></el-tree></template><script>export default {data() {return {props: {label: name,children: zones,isLeaf:"leaf",//关…

交互式笔记Jupyter Notebook本地部署并实现公网远程访问内网服务器

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下…

故障诊断模型 | Maltab实现PSO-BP粒子群算法优化BP神经网络的故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现PSO-BP粒子群算法优化BP神经网络的故障诊断 模型描述 在机器学习领域,我们常常需要通过训练数据来学习一个函数模型,以便在未知的数据上进行预测或分类。传统的神经网络模型需…

Java设计模式-外观模式

目录 一、影院管理项目 二、外观模式 &#xff08;一&#xff09;基本介绍 &#xff08;二&#xff09;原理类图 &#xff08;三&#xff09;解决影院管理 &#xff08;四&#xff09;注意事项和细节 &#xff08;五&#xff09;外观模式在MyBatis框架应用的源码分析 一…

Python+OpenGL绘制3D模型(七)制作3dsmax导出插件

系列文章 一、逆向工程 Sketchup 逆向工程&#xff08;一&#xff09;破解.skp文件数据结构 Sketchup 逆向工程&#xff08;二&#xff09;分析三维模型数据结构 Sketchup 逆向工程&#xff08;三&#xff09;软件逆向工程从何处入手 Sketchup 逆向工程&#xff08;四&#xf…

Linux操作系统( YUM软件仓库技术 )

镜像文件的回环挂载&#xff08;把iso镜像文件释放成系统安装光盘&#xff09;foundation0上操作 回环挂载的用法&#xff1a; du -sh 对象名 //估算文件&#xff08;一切对象皆文件&#xff09;大小 !$ //上一条命令的最后一个参数 新创建的挂载点目录是空白目录 挂载&#xf…

一款汇聚 精美UI+AI内容生成助手 的实用白板工具

大家好&#xff0c;我是Mandy。今天给大家分享的内容是&#xff0c;boardmix白板AI&#xff0c;在线创作神器。 boardmix是一款在线白板工具&#xff0c;是一个实时协作的智慧白板上、一键生成PPT、用AI协助创作思维导图、AI绘画、AI写作、共享资源素材、思维导图等工具。 前…

我的128天之创作纪念日

目录 序 机缘 收获 日常 成就 憧憬 序 今天收到CSDN的一条消息推送&#xff0c;“初九之潜龙勿用 &#xff0c;不知不觉今天已经是你成为创作者的 第128天 啦。。。” 是啊&#xff0c;自今年8月24日开始写文章以来&#xff0c;时间过得好快&#xff0c;无论开心、痛苦…

OpenStack云计算(-) 简介与部署Keystone

一.OpenStack简介 什么是云计算:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务) 云计算所包含的几个层次服务&#xff1a; SaaS ( Software as a Service ) :把在线软件作…

基于Java SSM框架实现实现中国古诗词学习平台项目【项目源码】计算机毕业设计

基于java的SSM框架实现中国古诗词学习平台系统演示 JSP技术介绍 JSP技术本身是一种脚本语言&#xff0c;但它的功能是十分强大的&#xff0c;因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时&#xff0c;它可以使显示逻辑和内容分开&#xff0c;这就极大的方便了用…

FindMy技术用于遥控器

遥控器已经悄然成为我们生活中的常客。无论是控制电视机的开关&#xff0c;调整音量&#xff0c;切换频道&#xff0c;还是控制空调的温度&#xff0c;调节灯光亮度&#xff0c;甚至远程操控智能家居设备&#xff0c;遥控器都为我们提供了极大的便利。 将遥控器与FindMy技术相结…

Linux内核并发与同步机制解读(arm64)上

关键词 原子操作、自旋锁、信号量、mutex、读写锁、percpu-rwsem 概述 从浅到深&#xff0c;逐步分析各种同步机制的功能。 1、原子操作 解决“读-修改-回写”的完整性&#xff0c;一般用于静态全局变量的保护&#xff0c;静态全局变量的操作过程. 例如&#xff0c;我们写一…