这是不可能用肯定或否定来回答的。
我假设您将在可执行文件的末尾存储数据,而不是将程序状态存储在配置文件中。我进一步假设你是这样做是为了好玩并且最终的结果不需要是完美的。
Any 代码签名机制 http://en.wikipedia.org/wiki/Code_signing您的平台上可能存在的这些行为可能会对这些技巧大喊大叫。仅当可执行文件没有发生重大更改时,签名才有效。 (至少,在,加密签名是根据可执行文件的整个内容计算的(签名本身除外),而不仅仅是标记为可执行文件或程序头中的数据的段。)
您的平台上可能存在的任何防病毒机制都会对此类技巧大喊大叫。自修改代码 http://en.wikipedia.org/wiki/Self-modifying_code肯定与试图保持隐藏或模糊的程序有关,并且向自身写入的代码将触发行为防病毒工具中的警报。
工具如tripwire http://en.wikipedia.org/wiki/Open_Source_Tripwire or 总是会抱怨你的程序。rpm -qa
or debsums
将始终报告您的可执行文件的问题。将该程序从一个站点可靠地传输到另一个站点将会很困难。
大多数环境中标准可执行文件的权限会完全禁止这种行为。用户帐户没有权限修改系统上的大多数可执行文件——只有可执行文件owned也可以由将运行可执行文件的用户编写。 (即使如此,强制访问控制 http://en.wikipedia.org/wiki/Mandatory_access_control系统如AppArmor http://wiki.ubuntu.com/AppArmor/, SELinux http://en.wikipedia.org/wiki/Security-Enhanced_Linux, TOMOYO http://tomoyo.sourceforge.jp/index.html.en, or SMACK http://schaufler-ca.com/如果配置正确,可以禁止进程写入程序文件。几乎所有合理的安全配置文件都会禁止它。)
没有系统管理员会允许two用户执行and写入可执行文件。
你也有一个务实的问题首先找到可执行文件。至少Linux提供了/proc/self/exe
,但是 (a) 系统管理员可能没有安装它 (b) 系统管理员可能不允许大多数进程use(c) 如果在程序执行时替换可执行文件,则可能很难找到要修改的正确文件。
您必须在两种更新可执行文件的方法之间做出决定:要么modify现有文件(ftell(3)
and fseek(3)
)或者将更改的内容写入新文件并replace可执行文件。这两种方法都很麻烦:如果修改文件,可能会同时执行多个副本,试图将冲突的编辑写入文件。聪明的编程可以避免巨大的问题,但整个可执行文件可能不会在一个持续的状态。如果替换该文件,则可能会同时执行多个副本,并且可执行文件的磁盘副本可能不会被替换。freed并且实际上可以删除,直到系统重新启动。您可能有十几个可执行程序文件的副本,无形中占用了磁盘空间。他们谁也不能共享内存执行时,增加内存压力。
是的,可以将配置数据保留在可执行程序中,甚至可以使其在某些环境中运行。但这不是生产质量。