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

news2025/7/7 4:43:51

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.coloradmin.cn/o/1344098.html

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

相关文章

简单了解SQL宽字节注入与httpXFF头注入(基于sqllabs演示)

1、宽字节注入 sqllabs-less-32为例 使用单引号进行测试 提示我们输入的单引号被转义符 \ 进行了转义&#xff0c;即转义符自动的出现在输入的特殊字符前面&#xff0c;这是防止sql注入的一种方法&#xff0c;导致无法产生报错。 这种情况我们就可以尝试宽字节注入&#xff…

R503S指纹识别模块的指令系统(二)

18 获取随机数 GetRandomCode&#xff08;0x14&#xff09; 功能说明&#xff1a;令模块生成一个随机数返回给上位机 输入参数&#xff1a;无 返回参数&#xff1a;确认码 RandomCode&#xff08;随机数&#xff09; 指令代码&#xff1a;0x14 确认码0x00 表示获取成功&…

YOLOv8改进 | 主干篇 | EfficientNetV1均衡缩放网络改进特征提取层

一、本文介绍 这次给大家带来的改进机制是EfficientNetV1主干&#xff0c;用其替换我们YOLOv8的特征提取网络&#xff0c;其主要思想是通过均衡地缩放网络的深度、宽度和分辨率&#xff0c;以提高卷积神经网络的性能。这种方法采用了一个简单但有效的复合系数&#xff0c;统一…

68.乐理基础-打拍子-大附点与变体

上一节内容&#xff1a;66.乐理基础-打拍子-小切分-CSDN博客&#xff0c;只所以没有67因为67可以不用知道&#xff0c;67节内容在&#xff1a;※-打拍子&#xff08;8&#xff09;-一拍内的变体1-乐理教程-腾讯课堂 (qq.com) 大附点&#xff1a;大附点这个名字不是通用的&…

通过AWS Endpoints从内网访问S3

AWS S3作为非结构化数据的存储&#xff0c;经常会有内网中的app调用的需求。S3默认是走公网访问的&#xff0c;如果内网app通过公网地址访问S3并获取数据会消耗公网带宽费用。如下图所示&#xff1a; AWS 提供了一种叫做endpoints的资源&#xff0c;这种资源可以后挂S3服务&a…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的固定帧率功能的技术背景CameraExplorer如何查看相机固定帧率功能在NEOAPI SDK里通过函数设置相机固定帧率 Baumer工业相机通过NEOAPI SDK设置相机固…

TSR勾画学习

1&#xff1a;勾画建议 文献&#xff1a;Scoring the tumor-stroma ratio in colon cancer: procedure and recommendations 主要讲述的是结肠癌(CRC)的勾画建议和流程。 1&#xff0c;切片选择建议&#xff1a; 原发肿瘤的载玻片最具侵袭性的部分&#xff08;即常规病理学…

golang 图片加水印,字体文件从哪里找

鼠标左键双击此电脑图标在此电脑文本框输入电脑默认字体地址&#xff1a;C:\Windows\Fonts找到需要用到的字体文件&#xff0c;复制到指定文件夹

jQuery-Validate验证插件的使用步骤【详解】

jQuery-Validate验证插件的使用步骤详解 1. 写在前面2. 效果展示3. Validate环境的搭建4. Validate基本方法的使用5. 实现错误消息的本地化6. 实现远程验证7. 自定义验证方法8. 验证表单完整版8.1 Html表单8.2 表单验证js逻辑8.3 表单验证css样式 1. 写在前面 我们知道&#x…

如何编译代码,把RustDesk主页面背景白色改成自己想要的图片

环境&#xff1a; RustDesk1.1.9自建服务器 问题描述&#xff1a; 如何编译代码&#xff0c;把RustDesk主页面背景白色改成自己想要的图片 解决方案&#xff1a; 详细方案&#xff0c;有需要私聊

鸿蒙OS应用开发之气泡提示

前面学习了弹窗提示,其实有时候只是想在旁边做一些说明,那么采用弹窗的方式就比较麻烦一些,这时可以采用系统里面的气泡提示方式。 系统也提供了几种方式弹出气泡提示,最简单的一种是采用bindPopup属性。它的定义如下: 在后面的参数设置里,也是比较复杂的形式。我们先来演…

Live800:客户体验策略是什么?企业如何制定客户体验策略?

客户体验策略是企业为了提升顾客对产品或服务的感知和满意度而采取的一系列措施和方法。它关注的是如何创造一个积极、愉悦和有价值的购买过程&#xff0c;从而建立长期的客户关系和忠诚度。客户体验策略是企业成功的关键之一&#xff0c;因为它能够帮助企业在竞争激烈的市场中…

【yolofastest上手】

一、前言 yolofastest网上资料比较少&#xff0c;也没有视频教学&#xff0c;所以想要使用参考了很多资料&#xff0c;只能说各资料都不尽全&#xff0c;让刚接触的小白无从下手。 参考资料: github地址 yolo-fastest 快速上手 修改参数遇到的问题 能在ARM-CPU上实时识别图像的…

Halcon颜色通道的处理decompose3/image_to_channels/channels _to _image

Halcon颜色通道的处理 文章目录 Halcon颜色通道的处理一. 图像的通道二. 访问通道1.访问通道2.获取通道的数量 三. 通道分离与合并1. decompose3算子2. image_to_channels 算子3. compose3算子4. channels_to_image算子 四. 处理RGB信息 由于彩色图像通常包含不止一个通道&…

广播信道的局域网

目录 一. 局域网的数据链路层二. 广播信道局域网三. 以太网标准四. CSMA/CD协议五. 以太网最短的帧六. 冲突解决方法-―退避算法 \quad 一. 局域网的数据链路层 \quad 局域网的特点 \quad 局域网的拓扑结构 \quad 局域网传输媒体 \quad \quad 媒体共享技术 \quad 二. 广播信道…

【前端面经】即时设计

目录 前言一面git 常见命令跨窗口通信vue 响应式原理发布订阅模式翻转二叉树Promise.all()扁平化数组面试官建议 二面Event Loop 原理Promise 相关css 描边方式requestAnimationReact 18 新特性JSX 相关react 输出两次函数式编程React 批处理机制http请求头有哪些本地存储性能优…

交叉编译aarch64架构支持openssl的curl、libcurl

本文档旨在指导读者在x86_64平台上交叉编译curl和openssl库以支持aarch64架构。在开始之前&#xff0c;请确保您的系统环境已正确配置。 1. 系统环境准备 系统是基于Ubuntu 20.04 LTS&#xff0c;高版本可能会有问题。首页&#xff0c;安装必要的开发工具和库文件。打开终端并…

[足式机器人]Part4 南科大高等机器人控制课 CH12 Robotic Motion Control

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;CLEAR_LAB 笔者带更新-运动学 课程主讲教师&#xff1a; Prof. Wei Zhang 课程链接 &#xff1a; https://www.wzhanglab.site/teaching/mee-5114-advanced-control-for-robotics/ 南科大高等机器人控制课 Ch12 Robotic …

C++:第十一讲DFS深搜

Everyday English Your optimal career is simply this: Share the real you with physical world through th e process of creative self-expression. 你的最佳职业很简单&#xff0c;就是这样&#xff1a;通过创造性自我表达的途径和世界分享真实的你。 前言 今天带着大家…

【音视频 ffmpeg 学习】 跑示例程序 持续更新中

环境准备 在上一篇文章 把mux.c 拷贝到main.c 中 使用 attribute(unused) 消除警告 __attribute__(unused)/** Copyright (c) 2003 Fabrice Bellard** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated docu…