linux - 可执行堆栈:标志
问题描述
我正在对我的 Ubuntu 18.04、X86_64 机器进行 return2libc 攻击。
为此,我编译了一个简单的 C 程序-z execstack
来禁用可执行堆栈标志。
现在查看GNU_STACK region
(通过readelf -a
)的标志,我RWE
启用了标志。
E
标志就是exclude
标志(说readelf)。
我期待着X
forexecute
标志。什么是排除标志,它的用途是什么,为什么没有执行标志?我浏览了一下,但找不到有关此主题的任何信息,因此在此先感谢您的帮助。
使用 readelf -a 编辑更新版本:
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
L (link order), O (extra OS processing required), G (group), T (TLS),
C (compressed), x (unknown), o (OS specific), E (exclude),
l (large), p (processor specific)
Es gibt keine Sektionsgruppen in dieser Datei.
Programm-Header:
Typ Offset VirtAdr PhysAdr
DateiGr SpeiGr Flags Ausr.
PHDR 0x0000000000000040 0x0000000000400040 0x0000000000400040
0x00000000000001f8 0x00000000000001f8 R 0x8
INTERP 0x0000000000000238 0x0000000000400238 0x0000000000400238
0x000000000000001c 0x000000000000001c R 0x1
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
0x00000000000007b0 0x00000000000007b0 R E 0x200000
LOAD 0x0000000000000e10 0x0000000000600e10 0x0000000000600e10
0x0000000000000228 0x0000000000000230 RW 0x200000
DYNAMIC 0x0000000000000e20 0x0000000000600e20 0x0000000000600e20
0x00000000000001d0 0x00000000000001d0 RW 0x8
NOTE 0x0000000000000254 0x0000000000400254 0x0000000000400254
0x0000000000000044 0x0000000000000044 R 0x4
GNU_EH_FRAME 0x0000000000000620 0x0000000000400620 0x0000000000400620
0x000000000000004c 0x000000000000004c R 0x4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RWE 0x10
GNU_RELRO 0x0000000000000e10 0x0000000000600e10 0x0000000000600e10
0x00000000000001f0 0x00000000000001f0 R 0x1
解决方案
E 标志是排除标志(说 readelf)。
中没有“排除”标志ELF
,E
代表“可执行”。
readelf 说
它没有这么说。
虽然X
经常用于执行(例如在 的输出中ls
),但这不是一个通用约定。
推荐阅读
- mysql - 如何将组合框的 ID 插入 Mysql 表
- android - 是否可以根据条件 android 呈现不同的布局?
- c# - 排序数据列 .NET C# 和 MS SQL
- database - 对于每门课程,列出未上过该课程的学生
- python - 如何查询与外键链接的ManyToManyField,并且该外键与另一个外键链接?
- python - 顶层窗口的问题
- javascript - Console.log(myState) 显示完整数组,但 Console.log(myState.length) 给出 0
- sql-server - 如何查询 Index Rebuild 的进度或估计
- c# - 尝试运行 ASP.NET 应用程序时出现解析错误
- c# - tabcontrol 中的 TabPage 在 C# Winforms 中不显示数据