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

avi*_*ldg 3 linux executable gcc portable-executable

我本来想要做的是让另一个程序将数据写入这个"空白空间",让可执行文件"工作"

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

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

void function(void) {
__asm {
nop
nop
nop
nop
};
}
Run Code Online (Sandbox Code Playgroud)

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

const char data[3];
Run Code Online (Sandbox Code Playgroud)

那么问题是另一个应用程序没有明确的地址要写入.

Mar*_*off 7

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

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

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