代码之家  ›  专栏  ›  技术社区  ›  aviraldg Ortiga

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

  •  3
  • aviraldg Ortiga  · 技术社区  · 15 年前

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

    我想在应用程序中添加一个签名,然后写入数据,稍后再搜索,但这听起来不太正确。。。

    现在,另一件重要的事情。。。我知道应该可以使用以下代码创建代码洞:

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

    然后,即使这实际上也是一样的(除了它将位于.data部分,因此不可执行之外):

    const char data[3];
    

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

    3 回复  |  直到 15 年前
        1
  •  7
  •   Mark Rushakoff    15 年前

    至少对于PEs和ELF,您可以在不影响程序的情况下将数据附加到可执行文件的末尾。

    seek s按该值向后移动到附加数据的开头。

    This article

        2
  •  3
  •   Mads Elvheim Mads Elvheim    15 年前

    使用ld链接器脚本创建新节,并在文件映像中保留实际空间。您还需要将符号与新的数据节相关联。也许更容易创建一个简短的部件文件,如下所示:

    .section .myresource
    .align 4
    .globl myres
    myres:
    .fill 1048576
    

    然后在C代码中使用符号获取数据,如下所示:

    extern const int* myres;
    

    http://sourceware.org/binutils/docs-2.19/

        3
  •  0
  •   Omry Yadan    15 年前

    你可以使用 linker scripts .