24 memcmp 的调试

news2024/10/7 2:30:38

前言

 

同样是一个 很常用的 glibc 库函数 

不管是 用户业务代码 还是 很多类库的代码, 基本上都会用到 内存数据的比较  

不过 我们这里是从 具体的实现 来看一下 

它的实现 主要是使用 汇编 来进行实现的, 因此 理解需要一定的基础 

测试用例

就是简单的使用了一下 memcpy, memset, memcmp 

#include "stdio.h"
 
int main(int argc, char** argv) {
 
int x = 2;
int y = 3;
int z = x + y;
 
void *p1 = malloc(20);
void *p2 = malloc(20);
void *p3 = malloc(20);
printf("p1 : 0x%x\n", p1);
printf("p2 : 0x%x\n", p2);
printf("p3 : 0x%x\n", p3);
 
memset(p1, 'a', 12);
memcpy(p2, p1, 17);
int p1CmpResult = memcmp(p1, p2); 
 
printf(" x + y = %d, p1CmpResult = %d\n ", z, p1CmpResult);
 
}
 

memcmp 的实现

这里 因为库程序里面没有调用 memcpy, 另外 用户代码中的 memcpy 没有调用到 x86_64 的 memcpy 的实现 

因此, 这里 直接看相关实现  

分为 32 字节以上, 的处理 和 32 字节一下的处理 

对于 小于32字节 的场景, 注意这里 si 为 (si - di) 表示的是 源地址 和 目标地址的偏移 

这里的道理和 memcpy 的调试 中的 "32 以下的数字" 处理类似, 来依次比较这 1, 2, 4, 8, 16 个字节的数据, 处理 32 字节, 其中某一部分字节比较出结果 直接返回 

对于长度大于 32字节 的场景 

按 16/32 字节为为单位进行比较, 如果比较出结果 直接返回 

PCMPEQB/PCMPEQW/PCMPEQD — Compare Packed Data for Equal

PMOVMSKB — Move Byte Mask


 

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

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

相关文章

【Python】正则表达式应用

知识目录 一、写在前面✨二、姓名检查三、解析电影排行榜四、总结撒花😊 一、写在前面✨ 大家好!我是初心,希望我们一路走来能坚守初心! 今天跟大家分享的文章是 正则表达式的应用 ,希望能帮助到大家!本篇…

Makefile基础教程(路径搜索)

文章目录 前言一、常用的源码管理方式二、VPATH和vpath1.VPATH2.vpath3.VPATH和vpath优缺点对比 三、VPATH和vpath同时出现make会怎么处理四、vpath指定多个文件夹总结 前言 在前面的文章中我们的文件全部都是放在同一个目录下面的,那么在实际的工程开发中会这样做…

阿里云服务器备份到本地 镜像 快照 OSS存储 (保姆级图文)

目录 省钱措施1. 创建自定义镜像2. 导出镜像创建/选择OSS对象存储空间 3. 下载到本地总结 欢迎关注 『发现你走远了』 博客,持续更新中 欢迎关注 『发现你走远了』 博客,持续更新中 阿里云的这个官方步骤要收几毛钱的费用 因为他要求必须先快照镜像&…

通过一个平面几何题来梳理解题模型

昨天一位邻居在群里问了一道题目: 已知:如图,OA平分∠BAC,∠1∠2.求证:△ABC是等腰三角形. 先不讲如何来解答这个题目,重点是我们来分析这道题到底在考察什么,如果条件换…

使用ScreenToGif录制GIF动态图

文章目录 1.下载ScreenToGif工具2. 下载后双击下面的.msi文件进行安装3. 在编辑器中可以对所有帧添加文字描述 1.下载ScreenToGif工具 链接:https://pan.baidu.com/s/1rvFZSbMdNus90hbzxsJlGA 提取码:gyqe2. 下载后双击下面的.msi文件进行安装 按照默认…

springboot高校专业招生信息管理系统jsp001

对于学校来说,每年的学生越来越多,需要管理的专业也有很多,每次专业报名信息的统计工作就变得非常的多,对于报名的统计工作变得非常的复杂。进入二十一世纪后,各种科学技术发速发展,管理软件尤其明显&#…

Golang每日一练(leetDay0078) 存在重复元素 II\III ContainsDuplicate

目录 219. 存在重复元素 II Contains Duplicate ii 🌟 220. 存在重复元素 III Contains Duplicate iii 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏…

chatgpt赋能python:Python判断语句:if语句

Python判断语句:if语句 在Python编程中,判断语句是非常重要的语法之一。if语句是最基本的判断语句,可以根据条件的真假来执行我们需要的代码块。 什么是if语句? if语句是一种条件语句。在Python中,if语句用于执行一…

C++泛型编程之模板

目录 一、什么是泛型编程 二、函数模板 2.1函数模板的概念 2.2函数模板格式 2.3函数模板的原理 2.5函数模板的实例化 2.6模板参数的匹配原则 三、类模板 3.1类模板的定义格式 3.2 类模板的实例化 四、非类型模板参数 五、模板的特化 5.1模板特化的概念:…

chatgpt赋能python:Python在SEO中的应用

Python在SEO中的应用 Python是一种语言,用于编写应用程序。近年来,Python编程成为了最受欢迎的编程语言之一。Python主要用于数据分析、机器学习、人工智能等方向。但是,Python在SEO中的应用也引起了越来越多的人的关注。那么,在…

bean的作用域及生命周期

目录 bean的作用域 ①概念 ②创建类User ③配置bean ④测试 bean生命周期 ①具体的生命周期过程 ②修改类User ③配置bean ④测试 ⑤bean的后置处理器 bean的作用域 ①概念 在Spring中可以通过配置bean标签的scope属性来指定bean的作用域范围,各取…

Java组合模式:构建多层次公司组织架构

在现实生活中,常常会遇到用树形结构组织的一些场景,比如国家省市,学校班级,文件目录,分级导航菜单,以及典型的公司组织架构,整个层次结构自顶向下呈现一颗倒置的树。这种树形结构在面向对象的世…

23 直接使用 dom api 更新了 #text节点, 之后响应式更新不生效了

前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 问题引发自 VueComponent 响应式处理 里面有一段内容, 直接在 console 中…

5月份月刊总结

5月份月刊总结 目录概述需求: 设计思路实现思路分析1.技术经理 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Sur…

我是如何利用业余时间写书的?---时间管理

低级的欲望放纵即可获得,高级的欲望只有克制才能达成。——卡耐基粉丝的误会 很多粉丝,问我, “彭老师你是不是自己创业了?” “彭老师我想报您的培训班。” … 得知我知识业余时间写文章,紧接着又会问, …

python+vue高校体育比赛赛事信息系统

本公共体育赛事管理系统是一个公共体育赛事管理信息的平台,采用vue,MYSQL的开发环境,后台使用python开发架构,并使用django简化对数据库方面的操作,基于B/S结构进行开发。本系统主要实现用户在线进行密码管理&#xff…

[数据集][目标检测]目标检测数据集绝缘子缺陷防震锤1688张5类别VOC格式

数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1688 标注数量(xml文件个数):1688 标注类别数:5 标注类别名称:["flashover",&…

chatgpt赋能python:Python彩色转黑白简介

Python彩色转黑白简介 Python是一种高级编程语言,提供了许多内置功能和库来进行图像处理。其中之一就是彩色转黑白。彩色图像是RGB(红色,绿色和蓝色)通道的混合,而黑白图像则只有灰度值。 在本篇文章中,我…

Go 中的随机性测试

👇我在这儿 这是关于 Go 语言模糊测试的四部分教程系列的第一部分: 1、Go 语言中的随机测试 2、Go 语言中的模糊测试 3、写一个 Go 语言的模糊测试目标(即将推出) 4、通过模糊化发现漏洞(即将推出) 为我们的 Go 程序选择好的测试用例有点看运气。有时我们很幸运找到…

chatgpt赋能python:Python字符串首字母大写的方法,让你的SEO效果更佳

Python字符串首字母大写的方法,让你的SEO效果更佳 在许多编程语言中,字符串都是一种基本的数据类型。在Python中,字符串是一个非常重要的数据类型,因为在很多情况下,它被用来表示文本。在这篇文章中,我们将…