【问题标题】:Using POSIX semaphores inside of glibc's malloc在 glibc 的 malloc 中使用 POSIX 信号量
【发布时间】:2018-10-06 07:57:19
【问题描述】:

我想修改 glibc 的 malloc 函数以进行一些逆向工程工作,使用 POSIX 信号量来完成任务会非常方便。问题是我不知道如何在 glibc 的构建过程中正确链接 pthread。如果有人可以提供比参考手册更详细地解释构建过程的链接,或者帮助我解决这个问题,那将是非常有帮助的。

【问题讨论】:

  • 您必须使用系统调用而不是 pthread 来实现信号量,因为 pthread 可能会使用自己的 malloc。检查musl-libc或newlib的实现
  • 在这种特殊情况下确实如此。谢谢你。您是否知道更通用的方法来链接不使用 malloc 的库?
  • 通用方法 - lmy_lib_no_malloc for GCC :) 链接是一种将所有目标文件组合成所需二进制格式的可执行文件的方法,即 ELF32/64、PE、COFF 等。静态库只是一个存档(zip文件)与目标文件,共享库(或DLL)与可执行文件相同,但没有可执行入口点。因此,当您链接时 - 您只需将目标文件和库组合成可执行文件。
  • 我指的是如何将特定库添加到 glibc 的构建过程的一般方法,而不是如何将库与编译器链接。
  • 正如我所写 - 不存在任何标准方法,您只需要构建一个库或可执行文件(编译器本身就是一个程序),一切都取决于您。例如,当 msul 或 newlib 不使用时,glibc 使用额外的 lib unwind。在任何情况下,都认为 C 标准库(MS CRT、glibc、msul、dietlibc 等)不依赖于任何其他库。如果您正在编写操作系统,C 库是操作系统或硬件之间的标准化接口。如果您打算重新编写/扩展 glibc,您可以从这本书开始:“Richard M. Stallman - 使用 GNU 编译器集合”

标签: linux makefile pthreads reverse-engineering glibc


【解决方案1】:

POSIX 信号量也是由 glibc 自己实现的,因此不被像 malloc() 这样的内部 glibc 函数使用(即:glibc 是 pthreads 实现库)。

相反,内部 glibc 函数使用由 libc-lock.h 定义的 mutex 和 rwlock 样式锁。您应该能够从这些构建块中创建所需的信号量样式语义。

【讨论】:

    猜你喜欢
    • 2018-03-23
    • 2013-04-09
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多