Function report |
Source Code:fs\binfmt_elf_fdpic.c |
Create Date:2022-07-28 20:29:04 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:map a binary by direct mmap() of the individual PT_LOAD segments
Proto:static int elf_fdpic_map_file_by_direct_mmap(struct elf_fdpic_params *params, struct file *file, struct mm_struct *mm)
Type:int
Parameter:
| Type | Parameter | Name |
|---|---|---|
| struct elf_fdpic_params * | params | |
| struct file * | file | |
| struct mm_struct * | mm |
| 1014 | delta_vaddr = 0 |
| 1015 | dvset = 0 |
| 1020 | phdr = copy of PT_PHDR table |
| 1023 | prot = 0 |
| 1028 | kdebug("[LOAD] va=%lx of=%lx fs=%lx ms=%lx", (unsignedlong)p_vaddr, (unsignedlong)p_offset, (unsignedlong)p_filesz, (unsignedlong)p_memsz) |
| 1035 | If p_flags & These constants define the permissions on sections in the programheader, p_flags. Then prot |= page can be read |
| 1036 | If p_flags & PF_W Then prot |= page can be written |
| 1037 | If p_flags & PF_X Then prot |= page can be executed |
| 1039 | flags = Changes are private | ETXTBSY |
| 1040 | If flags & T if this object is the executable Then flags |= mark it as an executable |
| 1043 | maddr = 0 |
| 1046 | Case & == PT_LOADs can be put anywhere |
| 1048 | Break |
| 1050 | Case & == PT_LOAD.vaddr must be honoured |
| 1056 | Case & == PT_LOADs require constant* displacement |
| 1061 | If Not dvset Then |
| 1065 | Else |
| 1066 | maddr = load_addr + p_vaddr - delta_vaddr |
| 1067 | flags |= Interpret addr exactly |
| 1069 | Break |
| 1071 | Case & == PT_LOADs should be contiguous |
| 1073 | Break |
| 1075 | Default |
| 1076 | BUG() |
| 1086 | kdebug("mmap[%d] <file> sz=%lx pr=%x fl=%x of=%lx --> %08lx", loop, p_memsz + disp, prot, flags, p_offset - disp, maddr) |
| 1090 | If IS_ERR_VALUE(maddr) Then Return maddr |
| 1093 | If (flags & PT_LOAD arrangement flags ) == PT_LOADs should be contiguous Then load_addr += align the pointer to the (next) page boundary (p_memsz + disp) |
| 1097 | core address to which mapped = maddr + disp |
| 1098 | VMA recorded in file = p_vaddr |
| 1102 | If p_offset == 0 Then mapped ELF header user address = core address to which mapped |
| 1107 | If prot & page can be written && disp > 0 Then |
| 1127 | flags |= Interpret addr exactly | don't use a file |
| 1140 | If prot & page can be written && excess1 > 0 Then |
| 1157 | If mm Then |
| 1159 | If Not start_code Then |
| 1160 | start_code = maddr |
| 1163 | Else if Not start_data Then |
| 1164 | start_data = maddr |
| 1169 | seg++ |
| 1172 | Return 0 |
| Name | Describe |
|---|---|
| elf_fdpic_map_file | load the appropriate binary image (executable or interpreter) into memory* - we assume no MMU is available* - if no other PIC bits are set in params->hdr->e_flags* - we assume that the LOADable segments in the binary are independently relocatable* - we |
| Source code conversion tool public plug-in interface | X |
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |