ELF修改节标志

时间:2013-08-21 05:51:27

标签: gcc gdb readelf

我使用gcc编译了一个C代码,当我使用readelf检查ELF的各个部分时,我可以看到.data部分的标志设置为WA(可写和可分配)。

是否可以修改这些标志?我可以将此部分变为可执行文件吗?

我正在使用gdb来调试这个二进制文件,我想在某个点将.data部分的标志设置为可执行文件。那么,这可以使用gdb或gcc来完成吗?

1 个答案:

答案 0 :(得分:3)

  

是否可以修改这些标志?我可以将此部分变为可执行文件吗?

是。如果你想一次性完成这个,最简单的方法可能是将源代码编译到程序集,然后在那里修改section属性,然后像往常一样将程序集编译成目标文件和链接。

  

我正在使用gdb来调试这个二进制文件,我想在某个时刻将.data部分的标志设置为可执行文件。

您也可以在GDB内拨打mprotect(addr, len, PROT_READ|PROT_WRITE|PROT_EXEC)

注意:在链接二进制文件之后修改.data部分中的标志将不会产生任何影响:内核不会查看部分,仅在{{1} } 细分

  

如何在汇编代码中将数据部分标记为可执行文件?我想,像这样:.section .data,“awx”,@ progbits。

是的,这看起来是正确的。它不起作用吗?

  

未找到mprotect()

您的可执行文件是否静态链接?如果没有,则应找到PT_LOAD(在mprotect中),并且您可能有GDB错误。如果您先libc.so,可能有助于推动GDB找到mprotect

另请注意:print &mprotect与我的建议非常不同(mprotect(0x0804a020, 80, PROT_READ, PROT_WRITE, PROT_EXEC)需要3个参数,而不是5个参数。您还需要仔细阅读mprotect - 它要求起始地址与页面对齐。