代码之家  ›  专栏  ›  技术社区  ›  SharpAffair

在hex编辑器中编辑库,同时保持其完整性

  •  0
  • SharpAffair  · 技术社区  · 16 年前

    4 回复  |  直到 16 年前
        1
  •  4
  •   Mark H    16 年前

    是的,你错过了很多。图书馆紧随其后 PE/COFF 格式,这是相当沉重的指针在整个文件。(例如,文件开头有一个表,指向文件中每个节的位置)。

    在您编辑资源的情况下,如果您确保在编辑之后更正指向任何内容的指针和大小,就有可能在不破坏内容的情况下进行编辑,但我怀疑这是否容易。如果您正在编辑.text部分(即代码),那么我怀疑您是否能完成它,因为函数调用和跳转的操作数是相对于它们在代码中的位置的位置—您需要更新整个代码以考虑编辑。

    克服这一问题的一种技术是“代码洞穴”,即用显式JMP指令替换现有代码的某个空位置(可以在运行时执行此操作,在您能够创建新内存的地方)-在您定义一些可以是任意长度的新代码的地方-然后您显式地将JMP返回到您调用from的地方(+5字节,比如JMP操作码+操作数)。

        2
  •  2
  •   Timothy    16 年前

    你要改的名字和旧名字一样长吗?如果不是,那么所有的偏移量都会发生偏移。有没有函数互相调用?这可能是另一个问题。获取源代码(如果项目不是内部的,则从项目网站获取,如果项目关闭,则从供应商获取)并在其中更改源代码,然后重新编译会更容易。我很好奇你为什么要改名字。

        3
  •  2
  •   Spudley Pat    16 年前

    基本上,底线是你所做的总是会打破东西。如果你运气不好,它甚至可能会把它弄坏 真正地

        4
  •  2
  •   David Thornley    16 年前

    库将由链接器编写以供链接器使用。它们遵循定义良好的格式,以便链接器能够轻松地进行写入和读取。他们不需要像编译器那样容忍人为输入。

    你没有任何理由想这么做。如果是为了好玩,那就比你想象的要难。如果您有其他原因,最好获取源代码,或者让拥有源代码的人重命名并重新生成。