}\r
\r
// Read Program Header Table\r
- phtab = malloc(sizeof(Elf32_Phdr)*hdr.phentcount);\r
+ phtab = malloc( sizeof(Elf32_Phdr) * hdr.phentcount );\r
+ if( !phtab ) {\r
+ LEAVE('n');\r
+ return NULL;\r
+ }\r
+ LOG("hdr.phoff = 0x%08x", hdr.phoff);\r
VFS_Seek(fp, hdr.phoff, SEEK_SET);\r
VFS_Read(fp, sizeof(Elf32_Phdr)*hdr.phentcount, phtab);\r
\r
for( i = 0; i < hdr.phentcount; i++ )\r
{\r
int lastSize;\r
- LOG("phtab[%i].Type = 0x%x", i, phtab[i].Type);\r
+ //LOG("phtab[%i].Type = 0x%x", i, phtab[i].Type);\r
+ LOG("phtab[%i] = {", i);\r
+ LOG(" .Type = 0x%08x", phtab[i].Type);\r
+ LOG(" .Offset = 0x%08x", phtab[i].Offset);\r
+ LOG(" .VAddr = 0x%08x", phtab[i].VAddr);\r
+ LOG(" .PAddr = 0x%08x", phtab[i].PAddr);\r
+ LOG(" .FileSize = 0x%08x", phtab[i].FileSize);\r
+ LOG(" .MemSize = 0x%08x", phtab[i].MemSize);\r
+ LOG(" .Flags = 0x%08x", phtab[i].Flags);\r
+ LOG(" .Align = 0x%08x", phtab[i].Align);\r
+ LOG(" }");\r
// Get Interpreter Name\r
if( phtab[i].Type == PT_INTERP )\r
{\r
if( !Elf_GetSymbol((void*)base, sSymName, &val) ) // Search this binary first\r
if( !Binary_GetSymbol( sSymName, &val ) )\r
return 0;\r
- //LOG("R_386_32 *0x%x += 0x%x('%s')", ptr, val, sSymName);\r
+ LOG("R_386_32 *0x%x += 0x%x('%s')", ptr, val, sSymName);\r
*ptr = val + addend;\r
break;\r
\r
if( !Elf_GetSymbol( (void*)base, sSymName, &val ) )\r
if( !Binary_GetSymbol( sSymName, &val ) )\r
return 0;\r
- //LOG("R_386_PC32 *0x%x = 0x%x + 0x%x('%s') - 0x%x", ptr, *ptr, val, sSymName, (Uint)ptr );\r
+ LOG("R_386_PC32 *0x%x = 0x%x + 0x%x('%s') - 0x%x", ptr, *ptr, val, sSymName, (Uint)ptr );\r
// TODO: Check if it needs the true value of ptr or the compiled value\r
// NOTE: Testing using true value\r
*ptr = val + addend - (Uint)ptr;\r
if( !Elf_GetSymbol( (void*)base, sSymName, &val ) )\r
if( !Binary_GetSymbol( sSymName, &val ) )\r
return 0;\r
- //LOG("R_386_GLOB_DAT *0x%x = 0x%x (%s)", ptr, val, sSymName);\r
+ LOG("R_386_GLOB_DAT *0x%x = 0x%x (%s)", ptr, val, sSymName);\r
*ptr = val;\r
break;\r
\r
if( !Elf_GetSymbol( (void*)base, sSymName, &val ) )\r
if( !Binary_GetSymbol( sSymName, &val ) )\r
return 0;\r
- //LOG("R_386_JMP_SLOT *0x%x = 0x%x (%s)", ptr, val, sSymName);\r
+ LOG("R_386_JMP_SLOT *0x%x = 0x%x (%s)", ptr, val, sSymName);\r
*ptr = val;\r
break;\r
\r
// Base Address (B+A)\r
case R_386_RELATIVE:\r
- //LOG("R_386_RELATIVE *0x%x = 0x%x + 0x%x", ptr, base, addend);\r
+ LOG("R_386_RELATIVE *0x%x = 0x%x + 0x%x", ptr, base, addend);\r
*ptr = base + addend;\r
break;\r
\r
// Check Bucket\r
i = pBuckets[ iNameHash ];\r
if(symtab[i].shndx != SHN_UNDEF && strcmp(symtab[i].name, Name) == 0) {\r
- *ret = symtab[ i ].value;\r
+ if(ret) *ret = symtab[ i ].value;\r
return 1;\r
}\r
\r
{\r
i = pChains[i];\r
if(symtab[i].shndx != SHN_UNDEF && strcmp(symtab[ i ].name, Name) == 0) {\r
- *ret = symtab[ i ].value;\r
+ if(ret) *ret = symtab[ i ].value;\r
return 1;\r
}\r
}\r