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

C语言内嵌汇编

反编译(二进制文件或者so库)

objdump --help
objdump -M intel -j .text -ld -C -S  out > out.txt #显示源代码同时显示行号, 代码段反汇编-M intel 英特尔语法-M x86-64-C:将C++符号名逆向解析-S 反汇编的同时,将反汇编代码和源代码交替显示-l 插入源文件名和行号-d 将代码段反汇编-j section:仅反汇编指定的section

一、基础内联汇编:

单个%前缀修饰寄存器
立即数都有 ‘$’ 前缀。如 “movl $78, %1 \n”
以 ‘b’、‘w’ 和 ‘l’ 为后缀指明内存访问长度是:movb movl
基址寄存器是放在小括号 () 内的。例:section: disp(base, index, scale)

二、扩展内联汇编:

两个%前缀修饰寄存器, 单个 % 前缀修饰操作数

 语法:`asm` [`volatile`] ( 汇编程序: 输出: 输入: 寄存器列表);__asm__ 等同于  asm 
__volatile__ 等同于 volatile

示例 参考:https://blog.csdn.net/lwx62/article/details/82796364

#include <iostream>
using namespace std;int main11(int argc, char*argv[])
{int a=10, b;asm ("movl %1, %%eax;""movl %%eax, %0;":"=b"(b)        /* output */:"c"(a)         /* input */:"%eax"         /* clobbered register */);int count = 1;char *str = "hello world!\n";asm("int $0x80": "=a"(count): "a"(5), "b"(1), "c"(str), "d"(13));int var = 100;asm ("incl %0" :"=a"(var):"0"(var)); //+1asm ("decl %0" :"=a"(var):"0"(var)); //-1//asm ("sidt %0\n" : :"m"(var));cout << var << endl;return 0;
}int main22()
{int foo = 10, bar = 15;__asm__ __volatile__("addl  %%ebx,%%eax":"=a"(foo):"a"(foo), "b"(bar));printf("foo+bar=%d\n", foo);return 0;
}int main33()
{int my_var = 10;int my_int = 20;int foo = 10, bar = 15;__asm__ __volatile__("   lock       ;\n""   subl %1,%0 ;\n": "=m"  (my_var): "ir"  (my_int), "m" (my_var):);cout << "my_var-my_int=:" << my_var << endl;cout << "my_int:" << my_int << endl;return 0;
}static inline char * _strcpy(char * dest,const char *src)
{int d0, d1, d2;__asm__ __volatile__(  "1:\tlodsb\n\t""stosb\n\t""testb %%al,%%al\n\t""jne 1b": "=&S"(d0), "=&D"(d1), "=&a"(d2): "0" (src), "1" (dest) : "memory");//lodsb:load string; //stosb:store string;//testb:就是test测试检查src/dst是否一致//约束“&S”,“&D”,“&a”表示寄存器esi,edi和eax, //是early clobber寄存器,即它们的内容将在函数完成之前改变//jne:判断上一步结果是否等于0,如果不等于0,则ZF=0,则进行跳转//1b: 表示 backward 向前跳转,1表示局部标签1//1f: 表示 forward 向后跳转return dest;
}int main()
{int a = 1;int b = 2;asm("movl %%eax,%1" ::"a"(a), "m"(b));cout << b << endl;int var = 100;asm ("incl %0" :"=a"(var):"0"(var));  //自+1asm ("decl %0" :"=a"(var):"0"(var));  //自-1//const char* s1="hello ASM";char buf[1024]={0};_strcpy(buf,s1);cout << " s1:" << s1 << endl;cout << "buf:" << buf << endl;
}/*
%0、%1 ... %9 它们依次代表 10 个操作数
a:表示寄存器eax
b:表示寄存器ebx
c:表示寄存器ecx
d:表示寄存器edx
D:表示寄存器edi
S:表示寄存器esi
q:表示以下任意四个寄存器之一:eax/ebx/ecx/edx
r:表示任意六个通用寄存器之一:eax/ebx/ecx/edx/edi/esi
g:表示可以存放到任意地点
A:把eax和edx组合成64位数
f:表示浮点寄存器
t:表示第一个浮点寄存器
u:表示第二个浮点寄存器m:操作数内存
o:偏移量访问*/

32位前缀 E
64位前缀 R
在这里插入图片描述

两家汇编主要区别

Intel CodeAT&T Code
mov eax,1movl $1,%eax
mov ebx,0ffhmovl $0xff,%ebx
int 80hint $0x80
mov ebx, eaxmovl %eax, %ebx
mov eax,[ecx]movl (%ecx),%eax
mov eax,[ebx+3]movl 3(%ebx),%eax
mov eax,[ebx+20h]movl 0x20(%ebx),%eax
add eax,[ebx+ecx*2h]addl (%ebx,%ecx,0x2),%eax
lea eax,[ebx+ecx]leal (%ebx,%ecx),%eax
sub eax,[ebx+ecx*4h-20h]subl -0x20(%ebx,%ecx,0x4),%eax

CPU 一般规则:

eax: 执行加法,函数返回值
ebx: 数据存取
ecx: 计数器
edx: 读写I/O端口时,edx用来存放端口号
esp: 栈顶指针
ebp: 栈底指针,ebp+偏移量 来定位 栈中变量
esi: 字符串操作时,用于存放数据源的地址
edi: 字符串操作时,用于存放目的地址的

寄存器常识

通用寄存器:r8-r15标志寄存器CF 进位标志PF 奇偶标志ZF 零标志SF 符号标志OF 补码溢出标志TF 跟踪标志IF 中断标志...
指令寄存器
段寄存器控制寄存器int3软中断指令,向量号为332位:cr0-cr4cr0: CPU控制标记和工作状态cr1: 保留未使用cr2: 页错误出现时保存导致出错的地址cr3: 当前进程的虚拟地址空间的重要信息:页目录地址cr4: 也存储了CPU工作相关以及当前人任务的一些信息64位:cr8调试寄存器8个:DR0~DR7描述符寄存器全局描述符表GDT(Global Descriptor Table):一级描述符表,一个处理器对应一个GDT,GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口LGDT和SGDT分别用于加载和保存GDTR寄存器的内容局部描述符表LDT(Local Descriptor Table):二级描述符表,有若干张,每个任务一张;LDTR可以在程序中随时改变,通过使用lldt指令由于每个进程都有自己的一套程序段、数据段、堆栈段,有了局部描述符表,则可以将每个进程的程序段、数据段、堆栈段封装在一起,只要改变LDTR就可以实现对不同进程的段进行访问中断描述符表寄存器IDTR:LIDT和SIDT分别用于加载和保存IDTR寄存器的内容任务寄存器TR:用于寻址一个特殊的任务状态段(Task State Segment,TSS)指令LTR和STR分别用于加载和保存TR寄存器的段选择符部分MSR寄存器

相关文章:

C语言内嵌汇编

反编译&#xff08;二进制文件或者so库&#xff09; objdump --help objdump -M intel -j .text -ld -C -S out > out.txt #显示源代码同时显示行号, 代码段反汇编-M intel 英特尔语法-M x86-64-C:将C符号名逆向解析-S 反汇编的同时&#xff0c;将反汇编代码和源代码交替显…...

《网络是怎样连接的》(三)

《网络是怎样连接的》&#xff08;二.2&#xff09;_qq_38480311的博客-CSDN博客 本文主要取材于 《网络是怎样连接的》 第三章。 简述&#xff1a;本文主要内容是解释 通过网线传输出去的包是如何经过集线器、交换机和路由器等网络设备&#xff0c;最终进入互联网的。 信号…...

SpringBoot 配置文件

一、配置文件作用 整个项目中所有重要的数据都是在配置文件中配置的&#xff0c;比如&#xff1a; 数据库的连接信息&#xff08;包含用户名和密码的设置&#xff09;&#xff1b; 项目的启动端口&#xff1b; 第三方系统的调用秘钥等信息&#xff1b; 用于发现和定位问题的…...

【K8S】 deployment.yaml文件与Service yaml文件详解

目录 deployment.yaml文件详解Service yaml文件详解 deployment.yaml文件详解 apiVersion: extensions/v1beta1 #接口版本 kind: Deployment #接口类型 metadata:name: cango-demo #Deployment名称namespace: cango-prd #命名空间l…...

GMSL 9296芯片对GMSL链路 插损/回损/线束要求

基于美信 9296的芯⽚ 对于GMSL信号链路上的需求如下&#xff1a; 1&#xff1a;插损 频段2M~3.5GHZ 在3G时需要⼩于-21db。通信速率 6Gbps/187Mbps 频段2M~3.5GHZ 在3G时需要⼩于-18db。通信速率 6Gbps/1.5Gbps 频段2M~2GHZ 在1.5G时需要⼩于-19.5db。通信速率 3Gbps/187Mbps …...

用库造一个list的轮子 【C++】

文章目录 list的模拟实现默认成员函数构造函数拷贝构造函数赋值运算符重载析构函数 迭代器迭代器为什么要存在&#xff1f;const_iteratorbegin和end inserterasepush_back && pop_backpush_front &&pop_frontswap 完整代码 list的模拟实现 默认成员函数 构造…...

java中的,>>,<<位运算

目录 二进制 >>,<< & 二进制 计算机内部使用二进制计数 二进制&#xff1a;在数学和数字电路中指以2为基数的记数系统&#xff0c;以2为基数代表系统是二进位制的&#xff0c;这一系统中&#xff0c;通常用两个不同的符号0&#xff08;代表零&#xff09;和…...

成功解决Android设备adb连接后显示device unauthorized

一、提出问题 在电脑通过USB连接新的Android设备&#xff0c;想要通过adb来进行一些操作时&#xff0c;却发现命令提示符上在输入下面命令后显示设备未授权的信息也就是"unauthorized" adb devices二、不可行的解决方案 有人提出的解决方案是打开Android设备的开发…...

初识mysql数据库之引入mysql客户端库

目录 一、下载第三方库 1. 准备工作 1. 使用mysql官网提供的库 2. yum源安装 二、测试第三方库是否可用 三、mysql常用接口介绍 1. 查看官方文档 2. 初始化 3. 关闭mysql 4. 连接mysql 5. 下达sql指令 四、一个简单的C客户端库连接mysql程序 1. 头文件 2. 初始化…...

勘探开发人工智能技术:机器学习(1)

0 提纲 2.1 什么是机器学习 2.2 不确定性 2.3 数据类型 2.4 分类、回归、聚类 2.5 分类问题的训练与测试 2.6 性能评价指标 1 什么是机器学习 对于西瓜这个抽象类来说&#xff0c;它具有“色泽”&#xff0c;“根蒂”&#xff0c;“敲声”三个属性&#xff1a; 通过观察这个…...

MySQL查看当前数据库视图-SQL语句

引言 查询语句为&#xff1a; show full tables where table_type 可查询当前数据库表 一&#xff0c;创建一个视图 # 创建视图 create view v_stu as # 视图内容&#xff08;连接的一个表&#xff09; select name from t_stu union all select tname from t_teach; 二&…...

Clickhouse 存储引擎

一、常用存储引擎分类 1.1 ReplacingMergeTree 这个引擎是在 MergeTree 的基础上&#xff0c;添加了”处理重复数据”的功能&#xff0c;该引擎和MergeTree的不同之处在于它会删除具有相同主键的重复项。 特点: 1使用ORDERBY排序键作为判断重复的唯一键 2.数据的去重只会在合并…...

基于golang多消息队列中间件的封装nsq,rabbitmq,kafka

基于golang多消息队列中间件的封装nsq,rabbitmq,kafka 场景 在创建个人的公共方法库中有这样一个需求&#xff0c;就是不同的项目会用到不同的消息队列中间件&#xff0c;我的思路把所有的消息队列中间件进行封装一个消息队列接口&#xff08;MQer&#xff09;有两个方法一个…...

【第一阶段】kotlin的函数

函数头 fun main() {getMethod("zhangsan",22) }//kotlin语言默认是public,kotlin更规范&#xff0c;先有输入&#xff08; getMethod(name:String,age:Int)&#xff09;再有输出(Int[返回值]) private fun getMethod(name:String,age:Int): Int{println("我叫…...

PAM安全配置-用户密码锁定策略

PAM是一个用于实现身份验证的模块化系统&#xff0c;可以在操作系统中的不同服务和应用程序中使用。 pam_faillock模块 pam_faillock模块用来实现账号锁定功能&#xff0c;它可以在一定的认证失败次数后锁定用户账号&#xff0c;防止暴力破解密码攻击。 常见选项 deny&…...

AndroidManifest.xml日常笔记

1 Bundle介绍 Bundle主要用于传递数据&#xff1b;它保存的数据&#xff0c;是以key-value(键值对)的形式存在的。 我们经常使用Bundle在Activity之间传递数据&#xff0c;传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组&#xf…...

SpringBoot异步框架

参考&#xff1a;解剖SpringBoot异步线程池框架_哔哩哔哩_bilibili 1、 为什么要用异步框架&#xff0c;它解决什么问题&#xff1f; 在SpringBoot的日常开发中&#xff0c;一般都是同步调用的。但经常有特殊业务需要做异步来处理&#xff0c;例如&#xff1a;注册新用户&…...

导出LLaMA ChatGlm2等LLM模型为onnx

通过onnx模型可以在支持onnx推理的推理引擎上进行推理&#xff0c;从而可以将LLM部署在更加广泛的平台上面。此外还可以具有避免pytorch依赖&#xff0c;获得更好的性能等优势。 这篇博客&#xff08;大模型LLaMa及周边项目&#xff08;二&#xff09; - 知乎&#xff09;进行…...

C++项目:在线五子棋对战网页版--匹配对战模块开发

玩家匹配是根据自己的天梯分数进行匹配的&#xff0c;而服务器中将玩家天梯分数分为三个档次&#xff1a; 1. 普通&#xff1a;天梯分数小于2000分 2. 高手&#xff1a;天梯分数介于2000~3000分之间 3. 大神&#xff1a;天梯分数大于3000分 当玩家进行对战匹配时&#xff0c;服…...

ssh 连接断开,正在执行的shell脚本也被中断了

背景 最近在训练chatGLM&#xff0c;一次训练经常要花掉近2个小时&#xff0c;但是由于网络不稳定&#xff0c;经常ssh莫名的断开&#xff0c;导致训练不得不重新开启&#xff0c;这就很浪费时间了 解决方案 下面教大家一种在后台执行命令的方案&#xff0c;即使你ssh连接断…...

UML 用例图,类图,时序图,活动图

UML之用例图&#xff0c;类图&#xff0c;时序图&#xff0c;活动图_用例图 时序图_siyan985的博客-CSDN博客 https://www.cnblogs.com/GumpYan/p/14734357.html 用例图与类图 - 简书...

Java 面试题2023

Java core JVM 1、JVM内存模型 2、JVM运行时内存分配 3、如何确定当前对象是个垃圾 4、GCrooot 包括哪些? 5、JVM对象头包含哪些部分 6、GC算法有哪些 7、JVM中类的加载机制 8、分代收集算法 9、JDK1.8 和 1.7做了哪些优化 10、内存泄漏和内存溢出有什么区别 11、J…...

【CSS3】CSS3 动画 ④ ( 使用动画制作地图热点图 )

文章目录 一、需求说明二、动画代码分析1、地图背景设置2、热点动画位置测量3、热点动画布局分析4、动画定义5、小圆点实现6、波纹效果盒子实现7、延迟动画设置 三、代码示例 一、需求说明 实现如下效果 , 在一张地图上 , 以某个位置为中心点 , 向四周发散 ; 核心 是实现 向四周…...

命令模式(Command)

命令模式是一种行为设计模式&#xff0c;可将一个请求封装为一个对象&#xff0c;用不同的请求将方法参数化&#xff0c;从而实现延迟请求执行或将其放入队列中或记录请求日志&#xff0c;以及支持可撤销操作。其别名为动作(Action)模式或事务(Transaction)模式。 Command is …...

Dapper 微型orm的光

介绍 Dapper是一个轻量级的ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它可以方便地将数据库查询结果映射到.NET对象上&#xff0c;同时也支持执行原生SQL查询。下面我将详细介绍Dapper的使用方法。 安装Dapper 首先&#xff0c;你需要通过NuGet包管理器将Dap…...

Mysql随心记--第一篇

MylSAM&#xff1a;查询速度快&#xff0c;有较好的索引优化和数据压缩技术&#xff0c;但是它不支持事务 InnoDB&#xff1a;它支持事务&#xff0c;并且提供行级的锁定&#xff0c;应用也相当广泛 docker ps -a --filter "ancestormysql" 查看linux中创建了多少个d…...

使用dockerfile安装各种服务组件

使用dockerfile安装各种服务组件 elasticsearch、minio、mongodb、nacos、redis 一、使用dockerfile安装elasticsearch:7.8.0 1、Dockerfile文件 FROM elasticsearch:7.8.0 #添加分词器 ADD elasticsearch-analysis-ik /usr/share/elasticsearch/plugins/elasticsearch-anal…...

如何简单的无人直播

环境搭建 ffmpeg安装&#xff0c;我这里用的是centos搭建的&#xff0c;其他平台可以自己百度 yum -y install wgetwget --no-check-certificate https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.0.3-64bit-static.tar.xztar -xJf ffmpeg-4.0.3-64bit-static.ta…...

【基于HBase和ElasticSearch构建大数据实时检索项目】

基于HBase和ElasticSearch构建大数据实时检索项目 一、项目说明二、环境搭建三、编写程序四、测试流程 一、项目说明 利用HBase存储海量数据&#xff0c;解决海量数据存储和实时更新查询的问题&#xff1b;利用ElasticSearch作为HBase索引&#xff0c;加快大数据集中实时查询数…...

ProComponent 用法学习

相信很多同学都用过 Ant Design 这一 react 著名组件库&#xff0c;而 ProComponents 则是在 antd 之上进行封装的页面级组件库&#xff08;指一个组件就可以搞定一个页面&#xff09;。它同时也是 Ant Design Pro 中后台框架所用的主要组件库。如果你手上有要用 react 开发的中…...

免费微信网站建设/百度推广售后客服电话

【摘 要】 List(interface):次序是List最重要的特点&#xff1b;它确保维护元素特定的顺序。List为Collection添加了许多方法&#xff0c;使得能够向List中间插入与移除元素&#xff1b;Set(interface):存入Set的每个元素必须是唯一的&#xff0c;因为Set不保存重复元素。加入S…...

可以做网站的语言/提高销售的10种方法

CSS Sprites是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去&#xff0c;这样一来&#xff0c;当访问该页面时&#xff0c;载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。对于当前网络流行的速度而言&#xff0c;不高于200KB…...

什么自己做网站/抖音seo搜索引擎优化

转载于:https://blog.51cto.com/quietheart/791181...

建设工程合同属于专属管辖吗/拼多多关键词优化步骤

第一 找到你要添加的jar包的路径&#xff0c;并复制这个路径 第二 winr,输入cmd然后打开cmd: 第三 输入以下格式&#xff1a;mvn install:install-file -DfileC:***\mail.jar -DgroupIdcom.demowar -DartifactIdtest -Dversion1.0.0 -Dpackagingjar 上面的C:***\mail.jar是自己…...

wordpress点击弹出层插件/百度竞价代理公司

文章目录&#xff08;一&#xff09;项目接口文档1、/inter/HTTP/auth&#xff08;鉴权&#xff09;接口2、/inter/HTTP/register&#xff08;注册&#xff09;接口3、/inter/HTTP/login&#xff08;登录&#xff09;接口4、/inter/HTTP/getUserInfo&#xff08;用户信息&#…...

天津网站制作南昌/视频网站搭建

Django多进程日志文件问题 最近使用Django做一个项目。在部署的时候发现日志文件不能滚动&#xff08;我使用的是RotatingFileHandler&#xff09;&#xff0c;只有一个日志文件。 查看Log发现一个错误消息&#xff1a;PermissionError: [WinError 32] 另一个程序正在使用此文件…...