如何从反汇编中找出ELF二进制文件的页面权限?
#1 楼
权限在程序标头的p_flags成员中。 typedef struct {
uint32_t p_type;
Elf32_Off p_offset;
Elf32_Addr p_vaddr;
Elf32_Addr p_paddr;
uint32_t p_filesz;
uint32_t p_memsz;
uint32_t p_flags;
uint32_t p_align;
} Elf32_Phdr;
p_flags This member holds a bit mask of flags relevant to the
segment:
PF_X An executable segment.
PF_W A writable segment.
PF_R A readable segment.
A text segment commonly has the flags PF_X and PF_R. A
data segment commonly has PF_X, PF_W and PF_R.
#2 楼
ELF二进制文件中包含名为“程序标头”的标头。当内核将二进制文件加载到内存中时,它只关心3种类型的头文件。因此,是的,内核根据ELF中是否存在程序标头将堆栈设置为不可执行或可执行。 ELF进程以后可以使用
PT_LOAD
libc / system调用来赋予内存中特定页面的可执行特权。
评论
事实证明它在标题中,但我可能会将问题留给像我一样在谷歌搜索方面遇到麻烦的其他人。为我服务,因为不知道ELF标头格式。好吧,您可以随时回答自己的问题。
只要有资格,我就会答应,除非有人花哨地回答:)