【问题标题】:why does a stack program segment have executable attribute为什么堆栈程序段具有可执行属性
【发布时间】:2013-03-21 18:29:20
【问题描述】:

这是来自 a.out 的转储

STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2 filesz 0x00000000 memsz 0x00000000 flags rwx

为什么栈段有可执行属性?

为什么没有带有 rw- 属性的堆段?

//在 ubuntu 32 位机器上。程序是一个简单的hello world。

命令: ld test.o startup.s; objdump -dhSxt -M intel-pneumonic a.out //startup.s 有一个带有 _start 符号的小汇编代码,它调用 main 并在 main 返回后退出。

【问题讨论】:

  • 您需要提供编译器标志和正在运行的命令。
  • @teppic 没什么特别的。只是 gcc test.c;将其添加到 Q 中。
  • 允许堆栈可执行,但我很惊讶它是默认值。在我的 Ubuntu 副本上不是。
  • @teppic,我很抱歉。我使用的实际命令是 ld test.o startup.s,其中我有带有 _startup 符号的汇编代码。这里有一些上下文 - airs.com/blog/archives/518

标签: linux elf


【解决方案1】:

命令:gcc test.c

试试gcc test.c -Wl,-z,noexecstack

这应该是任何现代发行版的默认设置。

【讨论】:

    猜你喜欢
    • 2011-12-13
    • 1970-01-01
    • 2022-01-20
    • 2023-01-13
    • 2011-08-15
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2017-02-20
    相关资源
    最近更新 更多