Re: Module sections Query

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Looking at kernel/module.c:load_module():
>
> I was curious how I would find the start and end of a section in
> memory of ".data" section. From the code, I believe it is

To know that u can see how load_module() identify each section by name:

        exportindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab");
        gplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl");
        gplfutureindex = find_sec(hdr, sechdrs, secstrings,
"__ksymtab_gpl_future");
        unusedindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_unused");
        unusedgplindex = find_sec(hdr, sechdrs, secstrings,
"__ksymtab_unused_gpl");

> sechdr->sh_addr (start). How to reach the end(in memory) since  the

What u said is correct.   U can see how load_module() load each
section into memory (from file image) in the following extraction
(look at the memcp() statement - both the start of memory, and size is
indicated).

> field  sechdr->sh_size is physical as per your explanation?   (correct as well).
>

        /* Transfer each section which specifies SHF_ALLOC */
        DEBUGP("final section addresses:\n");
        for (i = 0; i < hdr->e_shnum; i++) {
                void *dest;

                if (!(sechdrs[i].sh_flags & SHF_ALLOC))
                        continue;

                if (sechdrs[i].sh_entsize & INIT_OFFSET_MASK)
                        dest = mod->module_init
                                + (sechdrs[i].sh_entsize & ~INIT_OFFSET_MASK);
                else
                        dest = mod->module_core + sechdrs[i].sh_entsize;

                if (sechdrs[i].sh_type != SHT_NOBITS)
                        memcpy(dest, (void *)sechdrs[i].sh_addr,

sechdrs[i].sh_size);==============>>>>this is the heart of section
loading.
                /* Update sh_addr to point to copy in image. */
                sechdrs[i].sh_addr = (unsigned long)dest;
                DEBUGP("\t0x%lx %s\n", sechdrs[i].sh_addr, secstrings
+ sechdrs[i].sh_name);
        }


>
> Regards,
> Asim
>



-- 
Regards,
Peter Teoh

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux