【问题标题】:In the memory, how would I tell a section is from program or from static lib?在内存中,我如何判断一个部分是来自程序还是来自静态库?
【发布时间】:2017-04-08 22:24:17
【问题描述】:

从下图中可以看出,程序(在本例中为程序 1 和程序 2)在运行时被映射到内存中。于是我看了一下汇编代码,有没有什么线索可以分辨program1/2和StaticLib之间的boundary

谢谢,

【问题讨论】:

  • 一般情况下不会。一旦链接,你就不知道了。
  • 这张图完全没有意义。你的东西是“staticlib”,但它显示为一个目标文件。是的,您可以这样做,但通常不会这样做,因为这是一种浪费的方法。目标文件不驻留在内存中。目标文件作为可执行文件(或共享库)链接。这看起来就像一个令人困惑的 Gee-Wiz 图。

标签: assembly operating-system


【解决方案1】:

IIRC 它取决于操作系统和文件格式。
在 Windows 上,静态库函数通常由

call @xyz 

到地址

@xyz: jmp RealAddress

(其中包含函数的真实地址)。
所以通常在文件中有一个带有这些JMPs 的区域。所有这些JMP 目标都是链接库的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2015-08-26
    • 2020-03-22
    相关资源
    最近更新 更多