32#ifndef _LOS_LOAD_ELF_H
33#define _LOS_LOAD_ELF_H
45#ifdef LOSCFG_DRIVERS_TZDRIVER
56#define INTERP_FULL_PATH "/lib/libc.so"
57#define INVALID_FD (-1)
58#define STRINGS_COUNT_MAX 256
59#define ELF_PHDR_NUM_MAX 128
60#define FILE_LENGTH_MAX 0x1000000
61#define MEM_SIZE_MAX 0x1000000
64#define FILE_PATH_MAX PATH_MAX
67#define FILE_PATH_MIN 2
70#define USER_STACK_SIZE 0x100000
71#define USER_PARAM_BYTE_MAX 0x1000
72#define USER_STACK_TOP_MAX USER_ASPACE_TOP_MAX
74#define EXEC_MMAP_BASE 0x02000000
77#define RANDOM_MASK ((((USER_ASPACE_TOP_MAX + GB - 1) & (-GB)) >> 3) - 1)
80#define STACK_ALIGN_SIZE 0x10
81#define RANDOM_VECTOR_SIZE 1
128 return (vaddr >= USER_STACK_TOP_MAX);
INT32 OsLoadELFFile(ELFLoadInfo *loadInfo)
STATIC INLINE BOOL OsIsBadUserAddress(VADDR_T vaddr)
不超过用户空间顶部位置
UINT32 OsGetRndOffset(INT32 randomDevFD)
LD_ELF_EHDR elfEhdr
ELF头信息
LD_ELF_PHDR * elfPhdr
ELF程序头信息,也称段头信息
UINTPTR topOfMem
虚拟空间顶部位置,loadInfo->topOfMem = loadInfo->stackTopMax - sizeof(UINTPTR);
LosVmSpace * oldSpace
旧虚拟空间
UINTPTR elfEntry
装载点地址 即: _start 函数地址
UINTPTR stackParamBase
栈参数空间,放置启动ELF时的外部参数,大小为 USER_PARAM_BYTE_MAX 4K
const CHAR * fileName
文件名称
LosVmSpace * newSpace
新虚拟空间
ELFInfo interpInfo
解析器文件信息 lib/libc.so
UINTPTR stackBase
栈顶位置,栈基地址
UINTPTR stackTop
栈底位置,递减满栈下,stackTop是高地址位
INT32 stackProt
LD_PT_GNU_STACK栈的权限 ,例如(RW)
虚拟空间,每个进程都有一个属于自己的虚拟内存地址空间