当前位置: 首页 > news >正文

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修改后,再次编译运行,结果如下:
在这里插入图片描述
完成汇编混合编程!

相关文章:

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

week03 一、main参数传递二、反汇编三、汇编混合编程 一、main参数传递 参考 http://www.cnblogs.com/rocedu/p/6766748.html#SECCLA 在Linux下完成“求命令行传入整数参数的和” 注意C中main: int main(int argc, char *argv[]), 字符串“12” 转为12&#xff0c;可以调用atoi…...

前后端分离nodejs+vue医院预约挂号系统6nrhh

医院预约挂号系统主要有管理员、用户和医生三个功能模块。以下将对这三个功能的作用进行详细的剖析。 运行软件:vscode 前端nodejsvueElementUi 语言 node.js 框架&#xff1a;Express/koa 前端:Vue.js 数据库&#xff1a;mysql 开发软件&#xff1a;VScode/webstorm/hbuiderx均…...

在pytorch中,读取GPU上张量的数值 (数据从GPU到CPU) 的几种常用方法

1、.cpu() 方法&#xff1a; 使用 .cpu() 方法可以将张量从 GPU 移动到 CPU。这是一种简便的方法&#xff0c;常用于在进行 CPU 上的操作之前将数据从 GPU 取回 import torch# 在 GPU 上创建一个张量 gpu_tensor torch.tensor([1, 2, 3], devicecuda)# 将 GPU 上的张…...

【mysql】—— 表的内连和外连

在MySQL中&#xff0c;内连&#xff08;INNER JOIN&#xff09;和外连&#xff08;OUTER JOIN&#xff09;是用于联接多个表的操作。接下来&#xff0c;我分别给大家介绍下二者。 目录 &#xff08;一&#xff09;内连接 1、什么叫内连接 2、语法格式 3、案例&#xff1a;显…...

VSCode远程开发配置

目录 概要远程开发插件安装开始连接SSH无密码登录开发环境配置 概要 现在很多公司都是直接远程到服务器上写代码&#xff0c;使用远程开发&#xff0c;可以在与生产环境相同的环境中开发、测试和部署代码&#xff0c;减少因环境不同而导致的问题。当下VSCode远程开发是支持的比…...

复数值神经网络可能是深度学习的未来

一、说明 复数这种东西,在人的头脑中似乎抽象、似乎复杂,然而,对于计算机来说,一点也不抽象,不复杂,那么,将复数概念推广到神经网络会是什么结果呢?本篇介绍国外的一些同行的尝试实践,请我们注意观察他们的进展。...

【C语言】数据结构——排序二(快排)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;数组打印与交换1. 交换排序1.1 基本思想&#xff1a;1.2 冒泡与快排的异同 2. 冒泡排序2.1 基本思想2.2 …...

企业私有云容器化架构

什么是虚拟化: 虚拟化&#xff08;Virtualization&#xff09;技术最早出现在 20 世纪 60 年代的 IBM 大型机系统&#xff0c;在70年代的 System 370 系列中逐渐流行起来&#xff0c;这些机器通过一种叫虚拟机监控器&#xff08;Virtual Machine Monitor&#xff0c;VMM&#x…...

SpringBoot+modbus4j实现ModebusTCP通讯读取数据

场景 Windows上ModbusTCP模拟Master与Slave工具的使用&#xff1a; Windows上ModbusTCP模拟Master与Slave工具的使用-CSDN博客 Modebus TCP Modbus由MODICON公司于1979年开发&#xff0c;是一种工业现场总线协议标准。 1996年施耐德公司推出基于以太网TCP/IP的Modbus协议&…...

Linux性能优化全景指南

Part1 Linux性能优化 1、性能优化性能指标 高并发和响应快对应着性能优化的两个核心指标&#xff1a;吞吐和延时 应用负载角度&#xff1a;直接影响了产品终端的用户体验系统资源角度&#xff1a;资源使用率、饱和度等 性能问题的本质就是系统资源已经到达瓶颈&#xff0c;但…...

树莓派 ubuntu20.04下 python调讯飞的语音API,语音识别和语音合成

目录 1.环境搭建2.去讯飞官网申请密钥3.语音识别&#xff08;sst&#xff09;4.语音合成&#xff08;tts&#xff09;5.USB声卡可能报错 1.环境搭建 #环境说明&#xff1a;(尽量在ubuntu下使用, 本次代码均在该环境下实现) sudo apt-get install sox # 安装语音播放软件 pip …...

分布式系统架构设计之分布式系统实践案例和未来展望

分布式系统在过去的几十年里经历了长足的发展&#xff0c;从最初的简单分布式架构到今天的微服务、云原生等先进架构&#xff0c;取得了丰硕的成果。本文将通过实际案例分享分布式系统的架构实践&#xff0c;并展望未来可能的发展方向。 一、实践案例 1、微服务化实践 背景 …...

【办公软件】Excel双坐标轴图表

在工作中整理测试数据&#xff0c;往往需要一个图表展示两个差异较大的指标。比如共有三个数据&#xff0c;其中两个是要进行对比的温度值&#xff0c;另一个指标是两个温度的差值&#xff0c;这个差值可能很小。 举个实际的例子&#xff1a;数据如下所示&#xff0c;NTC检测温…...

彻底理解前端安全面试题(1)—— XSS 攻击,3种XSS攻击详解,建议收藏(含源码)

前言 前端关于网络安全看似高深莫测&#xff0c;其实来来回回就那么点东西&#xff0c;我总结一下就是 3 1 4&#xff0c;3个用字母描述的【分别是 XSS、CSRF、CORS】 一个中间人攻击。当然 CORS 同源策略是为了防止攻击的安全策略&#xff0c;其他的都是网络攻击。除了这…...

UE5.1_AI随机漫游

UE5.1_AI随机漫游 目录 UE5.1_AI随机漫游 AI随机漫游方法 方法1:AI角色蓝图直接写方法...

智慧城市新型基础设施建设综合方案:文件全文52页,附下载

关键词&#xff1a;智慧城市建设方案&#xff0c;智慧城市发展的前景和趋势&#xff0c;智慧城市项目方案&#xff0c;智慧城市管理平台&#xff0c;数字化城市&#xff0c;城市数字化转型 一、智慧城市新基建建设背景 1、城市化进程加速&#xff1a;随着城市化进程的加速&am…...

GitHub Copilot 终极详细介绍

编写代码通常是一项乏味且耗时的任务。现代开发人员一直在寻找新的方法来提高编程的生产力、准确性和效率。 像 GitHub Copilot 这样的自动代码生成工具可以使这成为可能。 GitHub Copilot 到底是什么&#xff1f; GitHub Copilot 于 2021 年 10 月推出&#xff0c;是 GitHub 的…...

LeetCode第63题 - 不同路径 II

题目 解答 class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int m obstacleGrid.length;int n obstacleGrid[0].length;if (obstacleGrid[0][0] 1) {return 0;}if (obstacleGrid[m - 1][n - 1] 1) {return 0;}int[][] dp new int[m][n];dp…...

python+django网上银行业务综合管理系统vue_bvj8b

本课题主要研究如何用信息化技术改善传统网上银行综合管理行业的经营和管理模式&#xff0c;简化网上银行综合管理的难度&#xff0c;根据管理实际业务需求&#xff0c;调研、分析和编写系统需求文档&#xff0c;设计编写符合银行需要的系统说明书&#xff0c;绘制数据库结构模…...

【软件工程】走进瀑布模型:传统软件开发的经典之路

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 软件工程 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言&#xff1a; 正文 主要阶段&#xff1a; 优点&#xff1a; 缺点&#xff1a; 应用范围&#xff1a; 结语 我的其他博客 前言&am…...

weixin252基于微信小程序的网约巴士订票平台的设计与实现ssm(文档+源码)_kaic

系统的实现5.1用户信息管理如图5.1显示的就是用户信息管理页面&#xff0c;此页面提供给管理员的功能有&#xff1a;用户信息的查询管理&#xff0c;可以删除用户信息、修改用户信息、新增用户信息&#xff0c;还进行了对用户名称的模糊查询性别类型查询的条件图5.1 用户信息管…...

rhio-pinmap:Arduino跨平台引脚抽象宏库

1. rhio-pinmap 项目概述rhio-pinmap 是一个专为 rhomb.io Master 模块&#xff08;即各类 MCU 主控板&#xff09;设计的 C/C 头文件宏定义集合&#xff0c;其核心目标是实现跨 MCU 平台的引脚抽象与代码可移植性。它并非驱动库或 HAL 层封装&#xff0c;而是一个轻量级、零运…...

终极指南:如何在iOS应用中集成TZImagePickerController图片选择器

终极指南&#xff1a;如何在iOS应用中集成TZImagePickerController图片选择器 【免费下载链接】TZImagePickerController 一个支持多选、选原图和视频的图片选择器&#xff0c;同时有预览、裁剪功能&#xff0c;支持iOS6。 A clone of UIImagePickerController, support pickin…...

电阻选型实战指南

一、 选型前的三个核心设计理念 在进入具体场景之前,先建立三个贯穿始终的思维框架: 1. 降额设计是可靠性的底线 核心原则:任何电阻都不要工作在极限状态。 量化标准: 功率降额:实际功耗 ≤ 额定功率 50%(消费级)或 30%(工业/车载) 电压降额:实际工作电压 ≤ 极…...

LingBot-Depth实战:如何将普通照片转换为可用于AR的深度信息?

LingBot-Depth实战&#xff1a;如何将普通照片转换为可用于AR的深度信息&#xff1f; 1. 引言&#xff1a;从平面到立体的魔法 在增强现实(AR)应用中&#xff0c;最关键的挑战之一就是让虚拟物体能够"理解"真实世界的三维结构。想象一下&#xff0c;如果你想让一只…...

2025虚幻引擎游戏逆向解包实战:从AES密钥获取到模型导出全流程解析

1. 虚幻引擎逆向解包基础认知 第一次接触虚幻引擎游戏逆向解包时&#xff0c;很多人会被各种专业术语吓到。其实说白了&#xff0c;这就是把游戏打包好的资源文件重新拆解出来的过程。就像把组装好的乐高模型拆回单个积木块&#xff0c;方便我们查看和修改。2025年的虚幻引擎5游…...

嵌入式Linux无线SSH远程登录实战:RTL8723BU+OpenSSH部署

1. 项目概述在嵌入式Linux系统开发实践中&#xff0c;远程登录能力是调试、部署与维护的核心基础设施。当开发板脱离实验室环境进入实际应用场景时&#xff0c;物理串口连接往往受限于距离、线缆可靠性及多设备管理复杂度。此时&#xff0c;基于TCP/IP协议栈的SSH&#xff08;S…...

避坑指南:Unity调用Win32 API设置无边框窗口时容易忽略的3个细节

Unity无边框窗口实战&#xff1a;避开Win32 API调用的3个典型陷阱 当Unity开发者需要实现PC端无边框窗口效果时&#xff0c;Win32 API调用往往是绕不开的技术路径。但在这个过程中&#xff0c;从窗口初始化异常到多显示器适配问题&#xff0c;再到任务栏高度计算的坑&#xff0…...

移远EC600SCN-AA模组QuecPython开发环境搭建全攻略(含驱动+固件+工具链)

移远EC600SCN-AA模组QuecPython开发环境搭建实战指南 1. 硬件准备与驱动安装 在开始QuecPython开发之前&#xff0c;确保您已准备好以下硬件组件&#xff1a; 移远EC600SCN-AA模组开发板USB Type-C数据线&#xff08;建议使用带屏蔽层的高质量线缆&#xff09;稳定的5V/2A电源适…...

从狂热到理性 大模型在测试内部落地的实战复盘

从狂热到理性&#xff1a;大模型在测试内部落地的实战复盘 一、理想与现实的差距 推动大模型技术在组织内部落地&#xff0c;从来不是一帆风顺的浪漫之旅。最初以为这只是"水到渠成的小工程"&#xff0c;毕竟开源工具和云服务触手可及。然而真正推进时才发现&#xf…...