【问题标题】:How to to store variables at specific offset如何将变量存储在特定的偏移量
【发布时间】:2012-04-19 10:34:54
【问题描述】:

有没有办法在 PE 文件的特定偏移处存储变量(在 C++ 中)? 类似的问题:我可以定义存储在数据部分中的变量的特定顺序吗?

我听说有些程序可以将设置存储在其可执行文件中。

【问题讨论】:

  • 这听起来好像您认为能够以这样的偏移量存储它们正在解决某个问题。当您询问真正的问题时,它可能会更有用,或者至少告诉它是什么,因此人们可能有更广泛的选择可供选择。
  • 我其实不需要实现它。但前段时间我试图将设置保存在我的可执行文件中,但找不到这样做的方法。

标签: c++ variables offset portable-executable


【解决方案1】:

根据数据的大小,您可以使用 PE 映像的已弃用(未使用)区域(如 MS-DOS 存根)来存储变量。许多这些未使用区域的偏移量是众所周知的(因为它们是由 PE 格式定义的)。

【讨论】:

  • 请记住,DLL 可以重新定位。 EXE 实际上永远不会重定位(因为它们总是先启动,因此不会与内存中的其他 PE 映像冲突)。
【解决方案2】:

“最简单”的方法是使用资源部分。您不需要偏移量:LoadString 取而代之的是一个 ID,它在重建过程中是稳定的。但是,顾名思义,这只是加载部分。 Windows 在执行时会锁定您的可执行文件,这使得SaveString 部分变得更加困难。很多

并不是说锁并不重要,因为你的程序可能存储在\Program Files\ 中,用户无论如何也不能在那里写。

【讨论】:

  • 谢谢,但我实际上对纯偏移解决方案更感兴趣 :)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 2011-06-29
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多