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

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

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

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

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

那么问题是另一个应用程序将没有确定的写入地址。

最佳答案

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

标准方法是将数据附加到可执行文件,然后附加一个数字,指示已附加多少字节。可执行文件然后打开自己进行读取,查看表示数据长度的最后 N 个字节,然后 seek s 向后按该值,到附加数据的开头。

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

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

10-16 20:24