Thanks Peter!
The memcpy has all the details I need.
Regards,
Asim
On 8/18/08, Peter Teoh <[EMAIL PROTECTED]> 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 [EMAIL PROTECTED]
Please read the FAQ at http://kernelnewbies.org/FAQ