Linux编写在运行时处理'自己的可执行文件

时间:2013-02-06 11:13:12

标签: c linux runtime executable

我希望能够在可执行文件(C程序)中的char数组中存储一些配置信息。我需要在运行时修改该数组的内容。 但我无法从该过程中打开该文件。 那么......是否有可能,如果是 - 这是什么诀窍? 非常感谢提前。

[1]问题是如何做到这是一个好主意吗?

[2]我想在运行时写入'自己的EXEC',因为我很好奇如何做到这一点。让我们把它想象成一个黑客攻击。

3 个答案:

答案 0 :(得分:0)

写入可执行文件几乎肯定是错误的。这里最简单的方法是使用配置文件,并从中读取到您的char数组中。

答案 1 :(得分:0)

既然你已经知道这是一个坏主意,我再也不会再说了。

您最好阅读有关可执行文件格式的内容。该文件可能是ELF格式,但您可以使用file命令进行检查。

通常,文件是按部分构建的,每个变量在部分中都有一个偏移量 nm命令可以告诉您给定符号的部分和偏移量 每个部分都从文件中的给定偏移量开始。我认为objdump命令可以找到这些偏移量。

它不适用于BSS部分中的符号(未初始化的静态变量) - 这些符号的值不存储在文件中 - 只是在加载时应该分配它们。

一旦你有了这些偏移,一切都很简单 - 添加它们,打开,寻找,写入,关闭。

答案 2 :(得分:0)

解决。 使用fork()+ execl()组合我制作一个可执行文件的副本,修改它没有任何问题,然后使用fork + execl mv我用修改后的可执行文件替换原始可执行文件。