linux - 如何在确定地址(gcc,linux)的可执行文件中创建 "empty"空间?

标签 linux gcc executable portable-executable

我本质上想要做的是让另一个程序将数据写入这个“空白空间”,以便可执行文件在

我想过在应用程序上附加一个签名,然后写入数据,稍后搜索它,但这听起来不太对......

现在,其他重要的事情......我知道应该可以通过使用如下代码来创建代码洞穴:

void function(void) {
__asm {
nop
nop
nop
nop
};
}

然后,即使这实际上是相同的(除了它将在 .data 部分中,因此不可执行):

const char data[3];

问题是其他应用程序没有明确的地址可以写入。

最佳答案

至少对于 PE 和 ELF,您可以将数据附加到可执行文件的末尾,而根本不会影响程序。

标准方法是将您的数据附加到可执行文件,然后附加一个数字以指示已附加了多少字节。可执行文件然后打开自身进行读取,查看表示数据长度的最后 N 个字节,然后seek s backwards by the value, to the beginning of the appended data.

This article详细介绍了如何使用上述方法制作自解压可执行文件。这与您想要的有点不同,但读取可执行文件中包含的数据的原理保持不变。

关于linux - 如何在确定地址(gcc,linux)的可执行文件中创建 "empty"空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1505132/

相关文章:

linux - 如何检查当前时间格式是否为12小时

c++ - 如何让 cmake 使用 "-pthread"而不是 -lpthread”?

php - exec - PHP return_val 为 126

iphone - 我有一个在 MAC OS 上使用 XCode 开发的项目,我如何在 Linux 上构建它?

c - 为什么在 jmps 就足够时调用?

c++ - 导入库<->动态链接库兼容性

powershell - 从 PowerShell 脚本创建可执行的 .exe 文件?

linux - git sudo 用户访问被拒绝

linux - 如何抑制在 grep 中被视为选项的模式

linux - Qt 5.3.2 + TSlib : wrong touch coordinates