gpt4 book ai didi

c++ - 从可执行文件中提取静态链接库

转载 作者:可可西里 更新时间:2023-11-01 17:30:15 26 4
gpt4 key购买 nike

我不确定这是否可行,但给定一个可执行文件 (foo.exe),其中包含许多静态链接的库。

是否有任何软件可以从此文件中提取位于可执行文件中的 .lib(或 .a)?

谢谢。

最佳答案

极不可能,因为通常情况下,您不会将库的全部内容注入(inject)到您的可执行文件中。

你只得到足够的满足所有 undefined symbol 。这实际上可能只是图书馆的一小部分。库通常由一组目标文件组成,只有那些需要的目标文件才会链接到您的可执行文件中。

例如,如果您在 C 运行时库中唯一调用的是 exit(),您将不太可能拥有 printf() 函数族在您的可执行文件中。

如果您直接链接目标文件,您可能有机会,因为无论是否使用它们都会被包含(除非您的链接器是智能的)。

但即便如此,这也是一项艰巨的任务,因为可执行文件中可能没有关于哪些代码段来自特定目标文件的信息。这可能是可行的,但如果有其他方法,我会首先考虑它。

让我澄清一下典型的过程:

  1. 四个目标文件,a.ob.oc.od.o 包含函数 a( )b()c()d()。它们全部添加到abcd.a 存档中。
  2. 除了 b() 调用 c() 之外,它们都是独立的(无依赖关系)。
  3. 你有一个调用 a()b() 的主程序,你编译它然后将它与 abcd.a 链接图书馆。
  4. 链接器将 a.ob.o 拖出库并放入您的可执行文件中,满足 a() 的需要b() 但引入了对 c() 的需求,因为 b() 需要它。
  5. 然后链接器将 c.o 拖出库并放入您的可执行文件中,以满足 c() 的需要。现在所有 undefined symbol 都已满足,可执行文件已完成并已清理干净,您可以在准备就绪后运行它。

在该过程的任何阶段都没有将 d.o 拖入您的可执行文件中,因此您将其取出的希望为零。

更新:关于“如果有另一种方式,我会先看看”我在上面发表的评论,你刚刚在评论中提到在其他答案中,您拥有制作要提取的库的源代码。我需要问:为什么你不能用那个源重建库?在我看来,这比尝试从一堆可执行代码中重新创建库要容易得多。

关于c++ - 从可执行文件中提取静态链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1728961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com