【问题标题】:How to modify glibc in Ubuntu to alter the results of printf() function [closed]如何在 Ubuntu 中修改 glibc 以改变 printf() 函数的结果 [关闭]
【发布时间】:2017-10-29 10:20:37
【问题描述】:

我想在 Ubunto 中修改 glibc,让 printf() 的结果包含一些其他组件,而不仅仅是打印 printf() 中的内容。例如,如果我输入 printf("Hello World"),我希望结果是 'J.Doe, Hello World',结果在 printf() 中的内容前面包含我的名字。如何通过修改 glibc 中的一些文件来做到这一点?

【问题讨论】:

  • 这是一个非常糟糕的主意。如果您真的想重载printf,只需编写您自己的版本并链接即可。不要试图维护自己的库。
  • 为什么你想这样做?您想通过它解决的实际问题是什么?我建议你花点时间阅读一下the XY problem,因为你的问题就是一个很好的例子。
  • 这是我学习 Ubuntu 的一些项目,但我对这个问题一无所知......
  • 实际上这不可能,因为重新定义内置函数具有未定义的行为。使用 GCC,printf("hello world\n"); 甚至不调用printf 函数

标签: c ubuntu printf glibc


【解决方案1】:
  1. 下载 glibc 包。我一直在使用的版本是 glibc-2.23.tar.gz。
  2. 确保您可以构建它。 (这并不容易——它是一个庞大而复杂的包,有很多系统依赖项。)
  3. 确保可以将 C 程序链接到新构建的 libc,而不是 /usr/lib 中的那个。
  4. 现在您已准备好开始修改 printf。所有 printf 变体的通用代码都在 stdio-common/vfprintf.c 中。谨防!它是复杂的、复杂的代码;这不是最直接、最容易理解的实现方式。

如果您想要一个更直接、更易于理解的 printf 实现来使用和学习,C FAQ list 中有一个。

【讨论】:

    猜你喜欢
    • 2016-04-21
    • 1970-01-01
    • 2019-07-15
    • 2017-04-12
    • 2013-09-29
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多