{"payload":{"allShortcutsEnabled":false,"fileTree":{"elf":{"items":[{"name":"elf.h","path":"elf/elf.h","contentType":"file"},{"name":"elf_header.c","path":"elf/elf_header.c","contentType":"file"},{"name":"elf_load.c","path":"elf/elf_load.c","contentType":"file"},{"name":"elf_reloc.c","path":"elf/elf_reloc.c","contentType":"file"},{"name":"elf_section.c","path":"elf/elf_section.c","contentType":"file"},{"name":"elf_string.c","path":"elf/elf_string.c","contentType":"file"}],"totalCount":6},"":{"items":[{"name":"elf","path":"elf","contentType":"directory"},{"name":"misc","path":"misc","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"PORTING_TO_NDLESS3.1.md","path":"PORTING_TO_NDLESS3.1.md","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"TODO","path":"TODO","contentType":"file"},{"name":"magic_hook.h","path":"magic_hook.h","contentType":"file"},{"name":"main.c","path":"main.c","contentType":"file"},{"name":"make_loader.sh","path":"make_loader.sh","contentType":"file"},{"name":"make_test.sh","path":"make_test.sh","contentType":"file"},{"name":"patch.c","path":"patch.c","contentType":"file"},{"name":"patch.h","path":"patch.h","contentType":"file"}],"totalCount":14}},"fileTreeProcessingTime":9.419884,"foldersToFetch":[],"repo":{"id":2979313,"defaultBranch":"master","name":"ndless-elfloader","ownerLogin":"tangrs","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2011-12-14T10:58:25.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1262688?v=4","public":true,"private":false,"isOrgOwned":false},"symbolsExpanded":false,"treeExpanded":true,"refInfo":{"name":"master","listCacheKey":"v0:1613653529.91776","canEdit":false,"refType":"branch","currentOid":"e0fb47f37be5c6f1cef1459323bc3b1abc390456"},"path":"elf/elf_load.c","currentUser":null,"blob":{"rawLines":["/*"," ndless-elfloader Loads ELF files"," Copyright (C) 2011 Daniel Tang",""," This program is free software: you can redistribute it and/or modify"," it under the terms of the GNU Affero General Public License as published by"," the Free Software Foundation, either version 3 of the License, or"," (at your option) any later version.",""," This program is distributed in the hope that it will be useful,"," but WITHOUT ANY WARRANTY; without even the implied warranty of"," MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"," GNU Affero General Public License for more details.",""," You should have received a copy of the GNU Affero General Public License"," along with this program. If not, see .","*/","","#include ","#include \"elf.h\"","","","static void *sectionptr;","static void *baseptr; //this is the real, absolute address where the image is loaded to.","static Elf32_Addr baseaddr; //this is the lowest virtual address that is specified in the ELF header","static Elf32_Addr prevaddr;","static size_t imagesize, prevsize;","","#define RESOLVE_ADDR(x) (void*)( ((uint32_t)(x)) - ((uint32_t)baseaddr) + ((uint32_t)baseptr) )","","static void reloc_callback(unsigned char type, int a, Elf32_Addr offset) {"," if (type == R_ARM_ABS32) { //Only process R_ARM_ABS32 entries. I think that's all we really need to fix up anyway","#ifdef DEBUG"," console_printf(\"Patched offset: %x from %x\", offset, *((uint32_t*)RESOLVE_ADDR(offset)));","#endif"," //This thing does:"," // 1. Resolve the offset to a real memory address"," // 2. Dereferences that address to get the address stored at that address"," // 3. Resolve that address to the real memory address."," // 4. ...and stores it back into the resolved offset."," *((void**)RESOLVE_ADDR(offset)) = RESOLVE_ADDR(*((void**)RESOLVE_ADDR(offset)));","#ifdef DEBUG"," console_printf(\" to %x\\n\", *((uint32_t*)RESOLVE_ADDR(offset)));","#endif"," }","}","","static void load_section_callback(Elf32_Shdr* shdr) {"," if (shdr->sh_flags & SHF_ALLOC) { //Only copy sections marked with \"ALLOC\""," if (prevaddr == 0xffffffff) prevaddr = shdr->sh_addr;"," if (shdr->sh_addr < baseaddr) baseaddr = shdr->sh_addr;",""," size_t padding = (shdr->sh_addr-prevaddr)-prevsize;"," size_t newsize = imagesize+shdr->sh_size+padding;",""," baseptr = realloc(baseptr, newsize);"," sectionptr = ((char*)baseptr)+imagesize;",""," if (padding > 0) {"," //memset(sectionptr, 0, padding);"," sectionptr = (char*)sectionptr+padding;"," }"," prevsize = shdr->sh_size;"," prevaddr = shdr->sh_addr;"," imagesize = newsize;",""," switch (shdr->sh_type) {"," case SHT_PROGBITS: //PROGBITS"," elf_load_section_to_addr(shdr, sectionptr, shdr->sh_size);"," break;"," case SHT_NOBITS: //NOBITS"," memset(sectionptr, 0, shdr->sh_size);"," break;"," default:"," break;"," }","#ifdef DEBUG"," console_printf(\"Loaded section %s\\n\","," elf_resolve_section_string(shdr->sh_name));","#endif"," }","}","","int elf_execute(FILE* fp, int *ret, int argc, char *argv[]) {"," if (!fp) return -1;"," sectionptr = NULL;"," baseptr = NULL;"," imagesize = 0;"," prevsize = 0;"," baseaddr = 0xffffffff;"," prevaddr = 0xffffffff;",""," Elf32_Shdr shdr;",""," elf_set_file(fp);",""," if (elf_sanity_check() != 0) return -1;"," Elf32_Ehdr hdr = elf_get_header();","","#ifdef DEBUG"," console_printf(\"---Begin loading ELF file---\\n\");"," console_printf(\"Loading sections to memory\\n\");","#endif"," elf_process_sections(load_section_callback);","#ifdef DEBUG"," console_printf(\"Finished loading image\\n\");",""," console_printf(\"---Begin relocating---\\n\");","#endif"," elf_get_got_section(&shdr);"," Elf32_Addr *got = RESOLVE_ADDR(shdr.sh_addr); //Get address of where the GOT is loaded in memory.",""," //Begin patching GOT"," int i;"," for (i=0; i= baseaddr) {"," got[i] = (Elf32_Addr)RESOLVE_ADDR(got[i]);","#ifdef DEBUG"," console_printf(\" to %p\\n\", RESOLVE_ADDR(got[i]) );","#endif"," }else{"," //0x0 is special. Not sure what is exactly meant to be filled in"," //Fill in baseptr by default. Must double check in ELF specs"," got[i] = (Elf32_Addr)baseptr;","#ifdef DEBUG"," console_printf(\" to %p\\n\", baseptr);","#endif"," }"," }",""," //Fix up static initliazers and global variables"," elf_fix_reloc(reloc_callback);",""," clear_cache();",""," //Now we're done!","#ifdef DEBUG"," console_printf(\"Finished relocating\\n\");","#endif",""," void* entrypoint = RESOLVE_ADDR(elf_get_main()); //Get the address of main or _start","","#ifdef DEBUG"," console_printf(\"Total size of image was %d.\\n\""," \"Now jumping to entry point at 0x%p. It's bye bye from now\\n\\n\", imagesize, entrypoint);","#endif"," //Woot, run the executable!"," *ret = ((int (*)(int, char*[]))(entrypoint))(argc, argv);","#ifdef DEBUG"," console_printf(\"\\nImage (probably) ran successfully!\\n\""," \"Freeing memory and exiting ELF loader\\n\");","#endif"," free(baseptr);"," return 0;","}"],"stylingDirectives":[[{"start":0,"end":2,"cssClass":"pl-c"}],[{"start":0,"end":36,"cssClass":"pl-c"}],[{"start":0,"end":35,"cssClass":"pl-c"}],[{"start":0,"end":0,"cssClass":"pl-c"}],[{"start":0,"end":72,"cssClass":"pl-c"}],[{"start":0,"end":79,"cssClass":"pl-c"}],[{"start":0,"end":69,"cssClass":"pl-c"}],[{"start":0,"end":39,"cssClass":"pl-c"}],[{"start":0,"end":0,"cssClass":"pl-c"}],[{"start":0,"end":67,"cssClass":"pl-c"}],[{"start":0,"end":66,"cssClass":"pl-c"}],[{"start":0,"end":65,"cssClass":"pl-c"}],[{"start":0,"end":55,"cssClass":"pl-c"}],[{"start":0,"end":0,"cssClass":"pl-c"}],[{"start":0,"end":76,"cssClass":"pl-c"}],[{"start":0,"end":73,"cssClass":"pl-c"}],[{"start":0,"end":2,"cssClass":"pl-c"}],[],[{"start":0,"end":8,"cssClass":"pl-k"},{"start":9,"end":15,"cssClass":"pl-s"}],[{"start":0,"end":8,"cssClass":"pl-k"},{"start":9,"end":16,"cssClass":"pl-s"}],[],[],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":11,"cssClass":"pl-smi"},{"start":12,"end":13,"cssClass":"pl-c1"},{"start":13,"end":23,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":11,"cssClass":"pl-smi"},{"start":12,"end":13,"cssClass":"pl-c1"},{"start":13,"end":20,"cssClass":"pl-s1"},{"start":22,"end":88,"cssClass":"pl-c"}],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":17,"cssClass":"pl-smi"},{"start":18,"end":26,"cssClass":"pl-s1"},{"start":28,"end":100,"cssClass":"pl-c"}],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":17,"cssClass":"pl-smi"},{"start":18,"end":26,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":13,"cssClass":"pl-smi"},{"start":14,"end":23,"cssClass":"pl-s1"},{"start":25,"end":33,"cssClass":"pl-s1"}],[],[{"start":0,"end":7,"cssClass":"pl-k"},{"start":8,"end":20,"cssClass":"pl-en"},{"start":21,"end":22,"cssClass":"pl-s1"}],[],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":11,"cssClass":"pl-smi"},{"start":12,"end":26,"cssClass":"pl-en"},{"start":27,"end":40,"cssClass":"pl-smi"},{"start":36,"end":40,"cssClass":"pl-smi"},{"start":41,"end":45,"cssClass":"pl-s1"},{"start":47,"end":50,"cssClass":"pl-smi"},{"start":51,"end":52,"cssClass":"pl-s1"},{"start":54,"end":64,"cssClass":"pl-smi"},{"start":65,"end":71,"cssClass":"pl-s1"}],[{"start":4,"end":6,"cssClass":"pl-k"},{"start":8,"end":12,"cssClass":"pl-s1"},{"start":13,"end":15,"cssClass":"pl-c1"},{"start":16,"end":27,"cssClass":"pl-c1"},{"start":31,"end":117,"cssClass":"pl-c"}],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":12,"cssClass":"pl-c1"}],[{"start":8,"end":22,"cssClass":"pl-en"},{"start":23,"end":51,"cssClass":"pl-s"},{"start":53,"end":59,"cssClass":"pl-s1"},{"start":61,"end":62,"cssClass":"pl-c1"},{"start":64,"end":72,"cssClass":"pl-smi"},{"start":72,"end":73,"cssClass":"pl-c1"},{"start":74,"end":86,"cssClass":"pl-en"},{"start":87,"end":93,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"}],[{"start":8,"end":26,"cssClass":"pl-c"}],[{"start":8,"end":57,"cssClass":"pl-c"}],[{"start":8,"end":81,"cssClass":"pl-c"}],[{"start":8,"end":62,"cssClass":"pl-c"}],[{"start":8,"end":61,"cssClass":"pl-c"}],[{"start":8,"end":9,"cssClass":"pl-c1"},{"start":11,"end":15,"cssClass":"pl-smi"},{"start":15,"end":16,"cssClass":"pl-c1"},{"start":16,"end":17,"cssClass":"pl-c1"},{"start":18,"end":30,"cssClass":"pl-en"},{"start":31,"end":37,"cssClass":"pl-s1"},{"start":40,"end":41,"cssClass":"pl-c1"},{"start":42,"end":54,"cssClass":"pl-en"},{"start":55,"end":56,"cssClass":"pl-c1"},{"start":58,"end":62,"cssClass":"pl-smi"},{"start":62,"end":63,"cssClass":"pl-c1"},{"start":63,"end":64,"cssClass":"pl-c1"},{"start":65,"end":77,"cssClass":"pl-en"},{"start":78,"end":84,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":12,"cssClass":"pl-c1"}],[{"start":8,"end":22,"cssClass":"pl-en"},{"start":23,"end":33,"cssClass":"pl-s"},{"start":35,"end":36,"cssClass":"pl-c1"},{"start":38,"end":46,"cssClass":"pl-smi"},{"start":46,"end":47,"cssClass":"pl-c1"},{"start":48,"end":60,"cssClass":"pl-en"},{"start":61,"end":67,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"}],[],[],[],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":11,"cssClass":"pl-smi"},{"start":12,"end":33,"cssClass":"pl-en"},{"start":34,"end":44,"cssClass":"pl-smi"},{"start":44,"end":45,"cssClass":"pl-c1"},{"start":46,"end":50,"cssClass":"pl-s1"}],[{"start":4,"end":6,"cssClass":"pl-k"},{"start":8,"end":12,"cssClass":"pl-s1"},{"start":12,"end":14,"cssClass":"pl-c1"},{"start":14,"end":22,"cssClass":"pl-c1"},{"start":23,"end":24,"cssClass":"pl-c1"},{"start":25,"end":34,"cssClass":"pl-c1"},{"start":38,"end":78,"cssClass":"pl-c"}],[{"start":8,"end":10,"cssClass":"pl-k"},{"start":12,"end":20,"cssClass":"pl-s1"},{"start":21,"end":23,"cssClass":"pl-c1"},{"start":24,"end":34,"cssClass":"pl-c1"},{"start":36,"end":44,"cssClass":"pl-s1"},{"start":45,"end":46,"cssClass":"pl-c1"},{"start":47,"end":51,"cssClass":"pl-s1"},{"start":51,"end":53,"cssClass":"pl-c1"},{"start":53,"end":60,"cssClass":"pl-c1"}],[{"start":8,"end":10,"cssClass":"pl-k"},{"start":12,"end":16,"cssClass":"pl-s1"},{"start":16,"end":18,"cssClass":"pl-c1"},{"start":18,"end":25,"cssClass":"pl-c1"},{"start":26,"end":27,"cssClass":"pl-c1"},{"start":28,"end":36,"cssClass":"pl-s1"},{"start":38,"end":46,"cssClass":"pl-s1"},{"start":47,"end":48,"cssClass":"pl-c1"},{"start":49,"end":53,"cssClass":"pl-s1"},{"start":53,"end":55,"cssClass":"pl-c1"},{"start":55,"end":62,"cssClass":"pl-c1"}],[],[{"start":8,"end":14,"cssClass":"pl-smi"},{"start":15,"end":22,"cssClass":"pl-s1"},{"start":23,"end":24,"cssClass":"pl-c1"},{"start":26,"end":30,"cssClass":"pl-s1"},{"start":30,"end":32,"cssClass":"pl-c1"},{"start":32,"end":39,"cssClass":"pl-c1"},{"start":39,"end":40,"cssClass":"pl-c1"},{"start":40,"end":48,"cssClass":"pl-s1"},{"start":49,"end":50,"cssClass":"pl-c1"},{"start":50,"end":58,"cssClass":"pl-s1"}],[{"start":8,"end":14,"cssClass":"pl-smi"},{"start":15,"end":22,"cssClass":"pl-s1"},{"start":23,"end":24,"cssClass":"pl-c1"},{"start":25,"end":34,"cssClass":"pl-s1"},{"start":34,"end":35,"cssClass":"pl-c1"},{"start":35,"end":39,"cssClass":"pl-s1"},{"start":39,"end":41,"cssClass":"pl-c1"},{"start":41,"end":48,"cssClass":"pl-c1"},{"start":48,"end":49,"cssClass":"pl-c1"},{"start":49,"end":56,"cssClass":"pl-s1"}],[],[{"start":8,"end":15,"cssClass":"pl-s1"},{"start":16,"end":17,"cssClass":"pl-c1"},{"start":18,"end":25,"cssClass":"pl-en"},{"start":26,"end":33,"cssClass":"pl-s1"},{"start":35,"end":42,"cssClass":"pl-s1"}],[{"start":8,"end":18,"cssClass":"pl-s1"},{"start":19,"end":20,"cssClass":"pl-c1"},{"start":23,"end":27,"cssClass":"pl-smi"},{"start":27,"end":28,"cssClass":"pl-c1"},{"start":29,"end":36,"cssClass":"pl-s1"},{"start":37,"end":38,"cssClass":"pl-c1"},{"start":38,"end":47,"cssClass":"pl-s1"}],[],[{"start":8,"end":10,"cssClass":"pl-k"},{"start":12,"end":19,"cssClass":"pl-s1"},{"start":20,"end":21,"cssClass":"pl-c1"},{"start":22,"end":23,"cssClass":"pl-c1"}],[{"start":12,"end":45,"cssClass":"pl-c"}],[{"start":12,"end":22,"cssClass":"pl-s1"},{"start":23,"end":24,"cssClass":"pl-c1"},{"start":26,"end":30,"cssClass":"pl-smi"},{"start":30,"end":31,"cssClass":"pl-c1"},{"start":32,"end":42,"cssClass":"pl-s1"},{"start":42,"end":43,"cssClass":"pl-c1"},{"start":43,"end":50,"cssClass":"pl-s1"}],[],[{"start":8,"end":16,"cssClass":"pl-s1"},{"start":17,"end":18,"cssClass":"pl-c1"},{"start":19,"end":23,"cssClass":"pl-s1"},{"start":23,"end":25,"cssClass":"pl-c1"},{"start":25,"end":32,"cssClass":"pl-c1"}],[{"start":8,"end":16,"cssClass":"pl-s1"},{"start":17,"end":18,"cssClass":"pl-c1"},{"start":19,"end":23,"cssClass":"pl-s1"},{"start":23,"end":25,"cssClass":"pl-c1"},{"start":25,"end":32,"cssClass":"pl-c1"}],[{"start":8,"end":17,"cssClass":"pl-s1"},{"start":18,"end":19,"cssClass":"pl-c1"},{"start":20,"end":27,"cssClass":"pl-s1"}],[],[{"start":8,"end":14,"cssClass":"pl-k"},{"start":16,"end":20,"cssClass":"pl-s1"},{"start":20,"end":22,"cssClass":"pl-c1"},{"start":22,"end":29,"cssClass":"pl-c1"}],[{"start":16,"end":20,"cssClass":"pl-k"},{"start":21,"end":33,"cssClass":"pl-c1"},{"start":35,"end":45,"cssClass":"pl-c"}],[{"start":20,"end":44,"cssClass":"pl-en"},{"start":45,"end":49,"cssClass":"pl-s1"},{"start":51,"end":61,"cssClass":"pl-s1"},{"start":63,"end":67,"cssClass":"pl-s1"},{"start":67,"end":69,"cssClass":"pl-c1"},{"start":69,"end":76,"cssClass":"pl-c1"}],[{"start":20,"end":25,"cssClass":"pl-k"}],[{"start":16,"end":20,"cssClass":"pl-k"},{"start":21,"end":31,"cssClass":"pl-c1"},{"start":33,"end":41,"cssClass":"pl-c"}],[{"start":20,"end":26,"cssClass":"pl-en"},{"start":27,"end":37,"cssClass":"pl-s1"},{"start":39,"end":40,"cssClass":"pl-c1"},{"start":42,"end":46,"cssClass":"pl-s1"},{"start":46,"end":48,"cssClass":"pl-c1"},{"start":48,"end":55,"cssClass":"pl-c1"}],[{"start":20,"end":25,"cssClass":"pl-k"}],[{"start":16,"end":23,"cssClass":"pl-k"}],[{"start":20,"end":25,"cssClass":"pl-k"}],[],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":12,"cssClass":"pl-c1"}],[{"start":8,"end":22,"cssClass":"pl-en"},{"start":23,"end":44,"cssClass":"pl-s"}],[{"start":8,"end":34,"cssClass":"pl-en"},{"start":35,"end":39,"cssClass":"pl-s1"},{"start":39,"end":41,"cssClass":"pl-c1"},{"start":41,"end":48,"cssClass":"pl-c1"}],[{"start":0,"end":6,"cssClass":"pl-k"}],[],[],[],[{"start":0,"end":3,"cssClass":"pl-smi"},{"start":4,"end":15,"cssClass":"pl-en"},{"start":16,"end":20,"cssClass":"pl-smi"},{"start":20,"end":21,"cssClass":"pl-c1"},{"start":22,"end":24,"cssClass":"pl-s1"},{"start":26,"end":29,"cssClass":"pl-smi"},{"start":30,"end":31,"cssClass":"pl-c1"},{"start":31,"end":34,"cssClass":"pl-s1"},{"start":36,"end":39,"cssClass":"pl-smi"},{"start":40,"end":44,"cssClass":"pl-s1"},{"start":46,"end":50,"cssClass":"pl-smi"},{"start":51,"end":52,"cssClass":"pl-c1"},{"start":52,"end":56,"cssClass":"pl-s1"}],[{"start":4,"end":6,"cssClass":"pl-k"},{"start":9,"end":11,"cssClass":"pl-s1"},{"start":13,"end":19,"cssClass":"pl-k"},{"start":20,"end":22,"cssClass":"pl-c1"}],[{"start":4,"end":14,"cssClass":"pl-s1"},{"start":15,"end":16,"cssClass":"pl-c1"},{"start":17,"end":21,"cssClass":"pl-c1"}],[{"start":4,"end":11,"cssClass":"pl-s1"},{"start":12,"end":13,"cssClass":"pl-c1"},{"start":14,"end":18,"cssClass":"pl-c1"}],[{"start":4,"end":13,"cssClass":"pl-s1"},{"start":14,"end":15,"cssClass":"pl-c1"},{"start":16,"end":17,"cssClass":"pl-c1"}],[{"start":4,"end":12,"cssClass":"pl-s1"},{"start":13,"end":14,"cssClass":"pl-c1"},{"start":15,"end":16,"cssClass":"pl-c1"}],[{"start":4,"end":12,"cssClass":"pl-s1"},{"start":13,"end":14,"cssClass":"pl-c1"},{"start":15,"end":25,"cssClass":"pl-c1"}],[{"start":4,"end":12,"cssClass":"pl-s1"},{"start":13,"end":14,"cssClass":"pl-c1"},{"start":15,"end":25,"cssClass":"pl-c1"}],[],[{"start":4,"end":14,"cssClass":"pl-smi"},{"start":15,"end":19,"cssClass":"pl-s1"}],[],[{"start":4,"end":16,"cssClass":"pl-en"},{"start":17,"end":19,"cssClass":"pl-s1"}],[],[{"start":4,"end":6,"cssClass":"pl-k"},{"start":8,"end":24,"cssClass":"pl-en"},{"start":27,"end":29,"cssClass":"pl-c1"},{"start":30,"end":31,"cssClass":"pl-c1"},{"start":33,"end":39,"cssClass":"pl-k"},{"start":40,"end":42,"cssClass":"pl-c1"}],[{"start":4,"end":14,"cssClass":"pl-smi"},{"start":15,"end":18,"cssClass":"pl-s1"},{"start":19,"end":20,"cssClass":"pl-c1"},{"start":21,"end":35,"cssClass":"pl-en"}],[],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":12,"cssClass":"pl-c1"}],[{"start":4,"end":18,"cssClass":"pl-en"},{"start":19,"end":51,"cssClass":"pl-s"}],[{"start":4,"end":18,"cssClass":"pl-en"},{"start":19,"end":49,"cssClass":"pl-s"}],[{"start":0,"end":6,"cssClass":"pl-k"}],[{"start":4,"end":24,"cssClass":"pl-en"},{"start":25,"end":46,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":12,"cssClass":"pl-c1"}],[{"start":4,"end":18,"cssClass":"pl-en"},{"start":19,"end":45,"cssClass":"pl-s"}],[],[{"start":4,"end":18,"cssClass":"pl-en"},{"start":19,"end":45,"cssClass":"pl-s"}],[{"start":0,"end":6,"cssClass":"pl-k"}],[{"start":4,"end":23,"cssClass":"pl-en"},{"start":24,"end":25,"cssClass":"pl-c1"},{"start":25,"end":29,"cssClass":"pl-s1"}],[{"start":4,"end":14,"cssClass":"pl-smi"},{"start":15,"end":16,"cssClass":"pl-c1"},{"start":16,"end":19,"cssClass":"pl-s1"},{"start":20,"end":21,"cssClass":"pl-c1"},{"start":22,"end":34,"cssClass":"pl-en"},{"start":35,"end":39,"cssClass":"pl-s1"},{"start":40,"end":47,"cssClass":"pl-c1"},{"start":50,"end":101,"cssClass":"pl-c"}],[],[{"start":4,"end":24,"cssClass":"pl-c"}],[{"start":4,"end":7,"cssClass":"pl-smi"},{"start":8,"end":9,"cssClass":"pl-s1"}],[{"start":4,"end":7,"cssClass":"pl-k"},{"start":9,"end":10,"cssClass":"pl-s1"},{"start":10,"end":11,"cssClass":"pl-c1"},{"start":11,"end":12,"cssClass":"pl-c1"},{"start":14,"end":15,"cssClass":"pl-s1"},{"start":15,"end":16,"cssClass":"pl-c1"},{"start":16,"end":20,"cssClass":"pl-s1"},{"start":21,"end":28,"cssClass":"pl-c1"},{"start":29,"end":35,"cssClass":"pl-k"},{"start":36,"end":46,"cssClass":"pl-s1"},{"start":49,"end":50,"cssClass":"pl-s1"},{"start":50,"end":52,"cssClass":"pl-c1"},{"start":56,"end":93,"cssClass":"pl-c"}],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":12,"cssClass":"pl-c1"}],[{"start":8,"end":22,"cssClass":"pl-en"},{"start":23,"end":50,"cssClass":"pl-s"},{"start":51,"end":54,"cssClass":"pl-s1"},{"start":55,"end":56,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"}],[{"start":8,"end":10,"cssClass":"pl-k"},{"start":12,"end":15,"cssClass":"pl-s1"},{"start":16,"end":17,"cssClass":"pl-s1"},{"start":22,"end":30,"cssClass":"pl-s1"}],[{"start":12,"end":15,"cssClass":"pl-s1"},{"start":16,"end":17,"cssClass":"pl-s1"},{"start":19,"end":20,"cssClass":"pl-c1"},{"start":22,"end":32,"cssClass":"pl-smi"},{"start":33,"end":45,"cssClass":"pl-en"},{"start":46,"end":49,"cssClass":"pl-s1"},{"start":50,"end":51,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":12,"cssClass":"pl-c1"}],[{"start":12,"end":26,"cssClass":"pl-en"},{"start":27,"end":37,"cssClass":"pl-s"},{"start":39,"end":51,"cssClass":"pl-en"},{"start":52,"end":55,"cssClass":"pl-s1"},{"start":56,"end":57,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"}],[{"start":9,"end":13,"cssClass":"pl-k"}],[{"start":12,"end":76,"cssClass":"pl-c"}],[{"start":12,"end":72,"cssClass":"pl-c"}],[{"start":12,"end":15,"cssClass":"pl-s1"},{"start":16,"end":17,"cssClass":"pl-s1"},{"start":19,"end":20,"cssClass":"pl-c1"},{"start":22,"end":32,"cssClass":"pl-smi"},{"start":33,"end":40,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":12,"cssClass":"pl-c1"}],[{"start":12,"end":26,"cssClass":"pl-en"},{"start":27,"end":37,"cssClass":"pl-s"},{"start":39,"end":46,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"}],[],[],[],[{"start":4,"end":52,"cssClass":"pl-c"}],[{"start":4,"end":17,"cssClass":"pl-en"},{"start":18,"end":32,"cssClass":"pl-s1"}],[],[{"start":4,"end":15,"cssClass":"pl-en"}],[],[{"start":4,"end":21,"cssClass":"pl-c"}],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":12,"cssClass":"pl-c1"}],[{"start":4,"end":18,"cssClass":"pl-en"},{"start":19,"end":42,"cssClass":"pl-s"}],[{"start":0,"end":6,"cssClass":"pl-k"}],[],[{"start":4,"end":8,"cssClass":"pl-smi"},{"start":8,"end":9,"cssClass":"pl-c1"},{"start":10,"end":20,"cssClass":"pl-s1"},{"start":21,"end":22,"cssClass":"pl-c1"},{"start":23,"end":35,"cssClass":"pl-en"},{"start":36,"end":48,"cssClass":"pl-en"},{"start":53,"end":88,"cssClass":"pl-c"}],[],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":12,"cssClass":"pl-c1"}],[{"start":4,"end":18,"cssClass":"pl-en"},{"start":19,"end":50,"cssClass":"pl-s"}],[{"start":11,"end":74,"cssClass":"pl-s"},{"start":76,"end":85,"cssClass":"pl-s1"},{"start":87,"end":97,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"}],[{"start":4,"end":31,"cssClass":"pl-c"}],[{"start":4,"end":5,"cssClass":"pl-c1"},{"start":5,"end":8,"cssClass":"pl-s1"},{"start":9,"end":10,"cssClass":"pl-c1"},{"start":13,"end":16,"cssClass":"pl-smi"},{"start":18,"end":19,"cssClass":"pl-c1"},{"start":21,"end":24,"cssClass":"pl-smi"},{"start":26,"end":30,"cssClass":"pl-smi"},{"start":30,"end":31,"cssClass":"pl-c1"},{"start":36,"end":46,"cssClass":"pl-s1"},{"start":49,"end":53,"cssClass":"pl-s1"},{"start":55,"end":59,"cssClass":"pl-s1"}],[{"start":0,"end":6,"cssClass":"pl-k"},{"start":7,"end":12,"cssClass":"pl-c1"}],[{"start":4,"end":18,"cssClass":"pl-en"},{"start":19,"end":59,"cssClass":"pl-s"}],[{"start":11,"end":52,"cssClass":"pl-s"}],[{"start":0,"end":6,"cssClass":"pl-k"}],[{"start":4,"end":8,"cssClass":"pl-en"},{"start":9,"end":16,"cssClass":"pl-s1"}],[{"start":4,"end":10,"cssClass":"pl-k"},{"start":11,"end":12,"cssClass":"pl-c1"}],[]],"colorizedLines":null,"csv":null,"csvError":null,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/tangrs/ndless-elfloader/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"elf_load.c","displayUrl":"https://github.com/tangrs/ndless-elfloader/blob/master/elf/elf_load.c?raw=true","headerInfo":{"blobSize":"5.21 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"87813cd","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Ftangrs%2Fndless-elfloader%2Fblob%2Fmaster%2Felf%2Felf_load.c","isCSV":false,"isRichtext":false,"toc":null,"lineInfo":{"truncatedLoc":"158","truncatedSloc":"133"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"issueTemplate":null,"discussionTemplate":null,"language":"C","languageID":41,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/tangrs/ndless-elfloader/blob/master/elf/elf_load.c","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/tangrs/ndless-elfloader/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/tangrs/ndless-elfloader/raw/master/elf/elf_load.c","renderImageOrRaw":false,"richText":null,"renderedFileInfo":null,"shortPath":null,"symbolsEnabled":true,"tabSize":8,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"reloc_callback","kind":"function","ident_start":1177,"ident_end":1191,"extent_start":1177,"extent_end":1237,"fully_qualified_name":"reloc_callback","ident_utf16":{"start":{"line_number":30,"utf16_col":12},"end":{"line_number":30,"utf16_col":26}},"extent_utf16":{"start":{"line_number":30,"utf16_col":12},"end":{"line_number":30,"utf16_col":72}}},{"name":"load_section_callback","kind":"function","ident_start":1971,"ident_end":1992,"extent_start":1971,"extent_end":2010,"fully_qualified_name":"load_section_callback","ident_utf16":{"start":{"line_number":47,"utf16_col":12},"end":{"line_number":47,"utf16_col":33}},"extent_utf16":{"start":{"line_number":47,"utf16_col":12},"end":{"line_number":47,"utf16_col":51}}},{"name":"elf_execute","kind":"function","ident_start":3171,"ident_end":3182,"extent_start":3171,"extent_end":3226,"fully_qualified_name":"elf_execute","ident_utf16":{"start":{"line_number":83,"utf16_col":4},"end":{"line_number":83,"utf16_col":15}},"extent_utf16":{"start":{"line_number":83,"utf16_col":4},"end":{"line_number":83,"utf16_col":59}}}]}},"copilotInfo":null,"copilotAccessAllowed":false,"csrf_tokens":{"/tangrs/ndless-elfloader/branches":{"post":"G_PU4YpHZKymfH51Q_rpPIUUEdXjylZJCTNvg0IIor3XA7M3O4gcfvnjJxpWe1db2nu0qJ88Hw6E5s38rczLhA"},"/repos/preferences":{"post":"lTRgNvdXG5X8JVQqtcARXgSrLr9jBLvhR1Ht6mbUkk5XAn7zhOzCGjEthq-EXfrjK1U3oCvxkNlBJ431Vihcnw"}}},"title":"ndless-elfloader/elf/elf_load.c at master ยท tangrs/ndless-elfloader"}