更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_load_elf.h 文件参考

浏览源代码.

结构体

struct  ELFInfo
 
struct  ELFLoadInfo
 

函数

STATIC INLINE BOOL OsIsBadUserAddress (VADDR_T vaddr)
 不超过用户空间顶部位置 更多...
 
UINT32 OsGetRndOffset (INT32 randomDevFD)
 
INT32 OsLoadELFFile (ELFLoadInfo *loadInfo)
 

函数说明

◆ OsGetRndOffset()

UINT32 OsGetRndOffset ( INT32  randomDevFD)

在文件 los_load_elf.c719 行定义.

720{
721 UINT32 randomValue = 0;
722
723#ifdef LOSCFG_ASLR
724 if (read(randomDevFD, &randomValue, sizeof(UINT32)) == sizeof(UINT32)) {
725 randomValue &= RANDOM_MASK;
726 } else {
727 randomValue = (UINT32)random() & RANDOM_MASK;
728 }
729#else
730 (VOID)randomDevFD;
731#endif
732
733 return ROUNDDOWN(randomValue, PAGE_SIZE);
734}
unsigned int UINT32
Definition: los_typedef.h:57
这是这个函数的调用关系图:

◆ OsIsBadUserAddress()

STATIC INLINE BOOL OsIsBadUserAddress ( VADDR_T  vaddr)

不超过用户空间顶部位置

在文件 los_load_elf.h126 行定义.

127{
128 return (vaddr >= USER_STACK_TOP_MAX);
129}
这是这个函数的调用关系图:

◆ OsLoadELFFile()

INT32 OsLoadELFFile ( ELFLoadInfo loadInfo)

在文件 los_load_elf.c1042 行定义.

1043{
1044 INT32 ret;
1045
1046 OsLoadInit(loadInfo);
1047
1048 ret = OsReadEhdr(loadInfo->fileName, &loadInfo->execInfo, TRUE);
1049 if (ret != LOS_OK) {
1050 goto OUT;
1051 }
1052
1053 ret = OsReadPhdrs(&loadInfo->execInfo, TRUE);
1054 if (ret != LOS_OK) {
1055 goto OUT;
1056 }
1057
1058 ret = OsReadInterpInfo(loadInfo);
1059 if (ret != LOS_OK) {
1060 goto OUT;
1061 }
1062
1063 ret = OsSetArgParams(loadInfo, loadInfo->argv, loadInfo->envp);
1064 if (ret != LOS_OK) {
1065 goto OUT;
1066 }
1067
1068 OsFlushAspace(loadInfo);
1069
1070 ret = OsLoadELFSegment(loadInfo);
1071 if (ret != LOS_OK) {
1073 goto OUT;
1074 }
1075
1076 OsDeInitLoadInfo(loadInfo);
1077
1078 return LOS_OK;
1079
1080OUT:
1081 OsDeInitFiles(loadInfo);
1082 (VOID)LOS_VmSpaceFree(loadInfo->newSpace);
1083 (VOID)OsDeInitLoadInfo(loadInfo);
1084 return ret;
1085}
STATIC VOID OsFlushAspace(ELFLoadInfo *loadInfo)
STATIC INT32 OsReadPhdrs(ELFInfo *elfInfo, BOOL isExecFile)
Definition: los_load_elf.c:253
STATIC VOID OsLoadInit(ELFLoadInfo *loadInfo)
Definition: los_load_elf.c:198
STATIC VOID OsDeInitFiles(ELFLoadInfo *loadInfo)
STATIC INT32 OsReadInterpInfo(ELFLoadInfo *loadInfo)
Definition: los_load_elf.c:292
STATIC INT32 OsSetArgParams(ELFLoadInfo *loadInfo, CHAR *const *argv, CHAR *const *envp)
Definition: los_load_elf.c:791
STATIC INT32 OsReadEhdr(const CHAR *fileName, ELFInfo *elfInfo, BOOL isExecFile)
Definition: los_load_elf.c:210
STATIC INT32 OsLoadELFSegment(ELFLoadInfo *loadInfo)
Definition: los_load_elf.c:956
STATIC VOID OsDeInitLoadInfo(ELFLoadInfo *loadInfo)
LITE_OS_SEC_TEXT VOID OsExecProcessVmSpaceRestore(LosVmSpace *oldSpace)
Definition: los_process.c:1531
signed int INT32
Definition: los_typedef.h:60
STATUS_T LOS_VmSpaceFree(LosVmSpace *space)
LosVmSpace * oldSpace
旧虚拟空间
Definition: los_load_elf.h:122
ELFInfo execInfo
可执行文件信息
Definition: los_load_elf.h:102
CHAR *const * envp
环境变量数组
Definition: los_load_elf.h:109
CHAR *const * argv
参数数组
Definition: los_load_elf.h:108
const CHAR * fileName
文件名称
Definition: los_load_elf.h:104
LosVmSpace * newSpace
新虚拟空间
Definition: los_load_elf.h:121
函数调用图:
这是这个函数的调用关系图: