我希望能够将一些配置信息存储在可执行文件(C 程序)内的 char 数组中。而且我需要在运行时修改该数组的内容。但我无法从进程中打开文件。所以...有可能吗?如果是的话——有什么诀窍?提前谢谢了。
[1] 问题是如何做而不是一个好主意吗?
[2] 我想在运行时写入 PROCESS' OWN EXEC 只是因为我很好奇如何做到这一点。让我们把它想象成有点 o hacking。
我希望能够将一些配置信息存储在可执行文件(C 程序)内的 char 数组中。而且我需要在运行时修改该数组的内容。但我无法从进程中打开文件。所以...有可能吗?如果是的话——有什么诀窍?提前谢谢了。
[1] 问题是如何做而不是一个好主意吗?
[2] 我想在运行时写入 PROCESS' OWN EXEC 只是因为我很好奇如何做到这一点。让我们把它想象成有点 o hacking。
解决了。使用 fork() + execl() 组合我制作了可执行文件的副本,修改它没有任何问题,然后使用 fork + execl mv 我将原始可执行文件替换为修改后的可执行文件。
既然你已经知道这是个坏主意,我就不再费心说了。
您最好阅读一些有关可执行文件格式的信息。该文件可能是 ELF 格式,但您可以使用file
命令检查它。
一般来说,一个文件是分节构建的,每个变量在节内都有一个偏移量。
该nm
命令可以告诉您给定符号的部分和偏移量。
每个部分都从文件中的给定偏移量开始。我认为该objdump
命令可以找到这些偏移量。
它不适用于 BSS 部分中的符号(未初始化的静态变量) - 这些值不存储在文件中 - 只是它们应该在加载时分配的事实。
一旦你有了这些偏移量,一切都很简单——添加它们、打开、查找、写入、关闭。
写入可执行文件几乎肯定是错误的做法。这里最简单的方法是使用配置文件,然后将其读取到您的 char 数组中。