Re: Module sections Query

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

 



Thanks Peter!

The memcpy has all the details I need.

Regards,
Asim

On 8/18/08, Peter Teoh <htmldeveloper@xxxxxxxxx> wrote:
> 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