memcpy memmove GLIBC_2.14/2.2.5 的解释

2023-11-24

我的问题源于一个共享库,我没有选择重新编译该库。错误指出undefined reference to memcpy@GLIBC_2.14.

我机器上的 GLIBC 版本是 2.12。我已经看到人们使用该行在线完成的修复

__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");

我所做的修复是使用十六进制编辑器将 2.14 的引用更改为 GLIBC_2.2.5。执行命令时readelf -V lib_name.so,输出更改为:

0x0060  Name: GLIBC_2.14 Flags: none Version 6
......
0x0080  Name: GLIBC_2.2.5 Flags: none Version 4

to:

0x0060  Name: GLIBC_2.2.5 Flags: none Version 6
......
0x0080  Name: GLIBC_2.2.5 Flags: none Version 4

这修正了我的错误。我想知道的是这会产生什么影响。我试图研究 memcpy 与 memmove 以及从 GLIBC_2.14 开始对 memcpy 的更改,但我不太明白发生了什么以及 memcpy 的原始问题是什么。我担心这个“修复”,尽管它允许我的程序运行,以防 memcpy 正在做的事情行为不正确。为什么我在网上看到的所有修复程序都专门链接到版本 2.2.5?

如果有人能给我一些关于这个主题的见解或提供一些相关信息的链接,我将不胜感激。


我想知道的是这会产生什么影响。

最可能的影响是您的第 3 方库第一次调用memcpy,它会崩溃。

有一个reason的新版本memcpy@GLIBC_2.14被引入:它与旧版本不兼容 ABImemcpy(这里发生的事情是,从 GLIBC-2.14 开始,memcpy is a GNU_IFUNC,这意味着它返回实际的地址memcpy;然后,第 3 方库中的代码将call返回的例程。但返回值是memcpy@GLIBC_2.2.5是目标参数而不是函数地址,因此预计您会立即崩溃)。

如果有人能给我一些见解

给你的图书馆requiresGLIBC-2.14。通过在 GLIBC-2.12 机器上运行它,您已经使所有保修失效。您最好的选择是:

  • 与第三方供应商合作以获得与您的执行环境兼容的库版本,或者
  • 使您的执行环境与您提供的库兼容(即更新您的操作系统)。你也许应该这样做anyway因此您的系统不会受到最近的漏洞的影响,例如CVE-2015-7547.

Update:

我没有使用 memcpy 的返回值

你没明白怎么办GNU_IFUNC的工作。这里有一个描述。问题是,虽然you不使用返回值,动态链接器does.

动态链接器内的代码执行以下操作:

if (symbol type == STT_GNU_IFUNC) {
  // call the IFUNC to get an address of the actual implementation
  void (*pfun)() = memcpy();
  // call the actual (non-IFUNC) implementation of memcpy.
  return (*pfun)(to, from, size);  // You will crash here!
}

通过替换非ifunc版本为infunc-通过 asm hack 的版本,你保证pfun == to,所以你的to被调用就像它是一个函数一样。通常应该立即SIGSEGV.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

memcpy memmove GLIBC_2.14/2.2.5 的解释 的相关文章

随机推荐

  • 无法将 .ttf 字体包含到项目中

    我试图将字体 Hipchick 包含到我的项目中 但它不起作用 我测试了几种方法 最终采用了以下方法 iOS 提示 自定义字体试图解决这个问题 但仍然不起作用 这是一些屏幕和代码 字体添加到项目中 hitch ttf 它被添加到 plist
  • 验证使用 Moq 调用的通用方法

    我无法验证该模拟IInterface SomeMethod
  • 为什么 tomcat-maven-plugin 尝试部署到错误的 URL?

    我正在创建一个包含两个模块的虚拟 Maven 项目 并且我包含了一个通用的 pom xml 文件 我能够从根 pom xml 文件进行构建并运行所有测试 但是当将文件部署到 Tomcat 时 它会失败 我有的插件是
  • 跟随手指的旋转动画,遵循圆的外部路径的 uibuttons

    我正在寻找一些指导来开始弄清楚跟踪手指运动并沿着圆的外部路径移动 UIButton 集合的动画 我想象它会有一种左轮手枪的感觉 就像每个都在底部锁定到位一样 或者像滑动其中一个幻灯片插件一样 提前致谢 示例代码在GitHub 其实并不是那么
  • 数组的indexOf和findIndex函数之间的区别

    我对数组中的两个函数 indexOf 和 find Index 之间的区别感到困惑 文档说 findIndex 返回数组中第一个元素的索引 其中 谓词为真 否则为 1 and indexOf 返回值在数组中第一次出现的索引 大批 主要区别在
  • 作为标记帮助程序的视图组件不会被调用

    ASP NET Core 1 1 中引入了将视图组件作为标记帮助程序调用 看 调用视图组件作为标签助手 但以下仅返回VC 测试视图的一部分 看起来
  • 如何使用 python 的 TimedRotatingFileHandler 强制旋转名称?

    我正在尝试使用定时旋转文件处理程序将每日日志保存在单独的日志文件中 轮换工作按预期完美运行 但我不喜欢它的工作方式是文件的命名 如果我将日志文件设置为 my log file log 这将是 今天的 日志文件 当它在午夜更改日期时 它将被重
  • 使用 PHP 打开和创建受密码保护的 zip 文件

    我发现以下两个命令分别用于创建和打开受密码保护的 zip 文件 然而我想知道是否可以用纯 PHP 来做到这一点 echo system zip P password file zip file txt echo shell exec unz
  • 使用任务(TPL)库是否会使应用程序成为多线程?

    最近在接受采访的时候 我被问到了这个问题 问 您编写过多线程应用程序吗 A Yes 问 愿意解释更多吗 答 我用过Tasks 任务并行库 执行一些任务 例如waiting for some info from internet while
  • 同步成本

    在高度并发的 Java 程序中 假设我的方法已正确编写并正确同步 我想知道如何确定哪个更好 void synchronized something or void something synchronized this here do st
  • SGEN XMLSerializer - 是否应将 .XMLSerializers.dll 添加为对当前项目或 GAC 的引用?

    我用 XMLSerializer 类做了一些事情 像大多数初学者一样 我在应用程序启动时面临性能问题 我阅读了很多博客 文章 最后使用了 SGEN 工具 现在性能看起来不错 但我仍然不清楚一些事情 1 我应该使用这样的SGEN语法 SGen
  • 如何在列表的强类型视图上使用 LabelFor

    当我使用asp net mvc 3脚手架做一个列表时 我得到一个包含表格的视图 该表的标题硬编码在视图中 我想使用 LabelFor 所以我得到了我需要的 l10n 我尝试做的 但失败了 是 model IEnumerable
  • 如何处理设备的authenticate_user!用ajax调用?

    我有一个带有 remote gt true 的表单 这意味着它将通过 ajax 提交 在控制器中 我有这样的代码 before filter authenticate user only gt create 因为我只允许确认的用户创建资源
  • xcode - 添加 AVFountation 框架

    我正在使用 xcode 4 2 创建一个 iphone 应用程序 并尝试使用 AVFoundation 框架来播放一些无线电流 当我将其导入项目的框架和构建时 我收到以下警告 ld warning ignoring file Users x
  • 如果字符串包含单词列表中的任何一个,R 每行返回 true 或 false

    我有一个包含一列字符串的数据集 text lt c flight cancelled dog cat coach travel car bus cow sheep high bar transport lt 0 df lt data fra
  • C 或 C++ 中的大整数 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在开发一个阶乘程序 当试图找到 1000 的阶乘时 该程序不起作用 我认为大整数是解
  • 在 PHP 中动态填充静态变量

    我有两个静态值 type 和 typeID 类型是人类可读的且恒定的 并且需要根据类型的值从数据库中查找类型ID 我需要在首次加载类定义时进行一次查找 为了说明这一点 这里有一些代码不起作用 因为您无法在声明空间中调用函数 MyClass
  • 从 s3 读取时出现溢出错误 - 有符号整数大于最大值

    使用以下代码将大文件从 S3 gt 5GB 读取到 lambda 中 import json import boto3 s3 boto3 client s3 def lambda handler event context response
  • 如何强制 ADO.Net 在阅读器 TableSchema 中仅使用 System.String 数据类型

    我正在使用 OleDbConnection 查询 Excel 2007 电子表格 我想强制 OleDbDataReader 仅使用字符串作为列数据类型 系统正在查看前 8 行数据并推断数据类型为 Double 问题是 在第 9 行 该列中有
  • memcpy memmove GLIBC_2.14/2.2.5 的解释

    我的问题源于一个共享库 我没有选择重新编译该库 错误指出undefined reference to memcpy GLIBC 2 14 我机器上的 GLIBC 版本是 2 12 我已经看到人们使用该行在线完成的修复 asm symver