Line 155... |
Line 155... |
elfRegInfo = (ELF_RegInfo*)(buf + elfProgram->p_offset);
|
elfRegInfo = (ELF_RegInfo*)(buf + elfProgram->p_offset);
|
gp_ptr = ntohl(elfRegInfo->ri_gp_value);
|
gp_ptr = ntohl(elfRegInfo->ri_gp_value);
|
}
|
}
|
if((int)elfProgram->p_vaddr < BUF_SIZE)
|
if((int)elfProgram->p_vaddr < BUF_SIZE)
|
{
|
{
|
//printf("[0x%x,0x%x,0x%x,0x%x,0x%x]\n", elfProgram->p_vaddr,
|
printf("[vaddr=0x%x,offset=0x%x,filesz=0x%x,memsz=0x%x,flags=0x%x]\n",
|
// elfProgram->p_offset, elfProgram->p_filesz, elfProgram->p_memsz,
|
elfProgram->p_vaddr, elfProgram->p_offset,
|
// elfProgram->p_flags);
|
elfProgram->p_filesz, elfProgram->p_memsz,
|
|
elfProgram->p_flags);
|
if((int)elfProgram->p_vaddr < 0)
|
if((int)elfProgram->p_vaddr < 0)
|
elfProgram->p_vaddr = 0;
|
elfProgram->p_vaddr = 0;
|
memcpy(code + elfProgram->p_vaddr, buf + elfProgram->p_offset,
|
memcpy(code + elfProgram->p_vaddr, buf + elfProgram->p_offset,
|
elfProgram->p_filesz);
|
elfProgram->p_filesz);
|
length = elfProgram->p_vaddr + elfProgram->p_filesz;
|
length = elfProgram->p_vaddr + elfProgram->p_filesz;
|
//printf("length = %d 0x%x\n", length, length);
|
printf("length = %d = 0x%x\n", length, length);
|
}
|
}
|
}
|
}
|
|
|
for(i = 0; i < elfHeader->e_shnum; ++i)
|
for(i = 0; i < elfHeader->e_shnum; ++i)
|
{
|
{
|
Line 200... |
Line 201... |
}
|
}
|
}
|
}
|
|
|
if(bss_start == 0)
|
if(bss_start == 0)
|
bss_start = length;
|
bss_start = length;
|
if(length > bss_start - elfHeader->e_entry)
|
//if(length > bss_start - elfHeader->e_entry)
|
{
|
//{
|
length = bss_start - elfHeader->e_entry;
|
// length = bss_start - elfHeader->e_entry;
|
}
|
//}
|
if(bss_start == length)
|
if(bss_start == length)
|
{
|
{
|
bss_start = length;
|
bss_start = length;
|
bss_end = length + 4;
|
bss_end = length + 4;
|
}
|
}
|