assembly - 在 glibc 的 ld.so 中禁用 xsave
问题描述
我想使用 gdb 的记录,但由于 glibc 的 ld.so 使用 xsave 指令,我收到错误“进程记录不支持地址 0x7ffff7fe883c 的指令 0xfae64”。
多亏了stackoverflow 答案,我能够通过二进制补丁修复类似的错误。运行半小时后使用调试符号编译 glibc 失败,所以如果有更快的解决方案,我会很高兴。我从这里得到了一个编译版本,但似乎没有提供更早的版本(即我现在使用 glibc 2.28.r502.g065957a3704-1 和 gdb 8.2.1)。如何使 gdb 记录工作?
解决方案
问题是 gdb 内置的 x86 仿真器不理解许多新指令。唯一的解决办法是等待一个带有相关说明的新版本。同时,这个线程提出了一些解决方法:
- 加载
LD_BIND_NOW
设置了环境变量的二进制文件1
以避免xsave
在动态链接器中触发 - 或者,链接要静态调试的二进制文件
- 或者,通过传递给 C 编译器与
-z now
例如链接-Wl,-z,now
推荐阅读
- image - 如何过滤单色图像中超出指定区域的白位?
- javascript - javascript 内联函数 - 结果是什么?
- types - 生锈; 类型的命名空间中包含哪些类型?
- apache-spark - Spark/Yarn - 连接错误 RetryingBlockFetcher 试图从随机端口获取块
- python - 如何擦除控制台输出的最后一个字符?
- python - 关于图像识别 cnn 应该在预测中返回什么的一些说明
- python - 我正在尝试解析所有页面的数据。只解析第一页
- android-studio - 如何在 Android Studio 中启用自动格式化 Flutter 项目?
- vee-validate - VeeValidate 3.1 未显示错误
- javascript - 未捕获的类型错误:无法读取 null 的属性“uid”