* - Provides binary loading and type abstraction
*/
#define DEBUG 0
+#define _POSIX_C_SOURCE 200809L // needed for strdup
#include "common.h"
#include <stdint.h>
#include <stdio.h>
strcat(tmp, "/");
strcat(tmp, Name);
- fd = acess_open(tmp, 4); // OPENFLAG_EXEC
+ fd = acess__SysOpen(tmp, 4); // OPENFLAG_EXEC
if(fd != -1) {
- acess_close(fd);
+ acess__SysClose(fd);
return strdup(tmp);
}
}
printf("Binary_LocateLibrary: tmp = '%s'\n", tmp);
#endif
- fd = acess_open(tmp, 4); // OPENFLAG_EXEC
+ fd = acess__SysOpen(tmp, 4); // OPENFLAG_EXEC
if(fd != -1) {
- acess_close(fd);
+ acess__SysClose(fd);
return strdup(tmp);
}
}
}
}
- fd = acess_open(Filename, 2|1); // Execute and Read
+ fd = acess__SysOpen(Filename, 2|1); // Execute and Read
if( fd == -1 ) {
// TODO: Handle libary directories
perror("Opening binary");
return NULL;
}
- acess_read(fd, &dword, 4);
- acess_seek(fd, 0, ACESS_SEEK_SET);
+ acess__SysRead(fd, &dword, 4);
+ acess__SysSeek(fd, 0, ACESS_SEEK_SET);
if( memcmp(&dword, "\x7F""ELF", 4) == 0 ) {
fmt = &gElf_FormatDef;
}
else {
fprintf(stderr, "Unknown executable format (0x%08x)\n", dword);
- acess_close(fd);
+ acess__SysClose(fd);
return NULL;
}
printf("fmt->Load(0x%x)...\n", fd);
#endif
ret = fmt->Load(fd);
- acess_close(fd);
+ acess__SysClose(fd);
#if DEBUG
printf("fmt->Load(0x%x): %p\n", fd, ret);
#endif
}
}
-int Binary_GetSymbol(const char *SymbolName, uintptr_t *Value, size_t *Size)
+int Binary_GetSymbol(const char *SymbolName, uintptr_t *Value, size_t *Size, void *IgnoreBase)
{
int i;
tBinary *bin;
// Search list of loaded binaries
for(bin = gLoadedBinaries; bin; bin = bin->Next)
{
+ if( bin->Base == IgnoreBase ) continue ;
if( !bin->Ready ) continue;
//printf(" Binary_GetSymbol: bin = %p{%p, %s}\n", bin, bin->Base, bin->Path);
if( bin->Format->GetSymbol(bin->Base, (char*)SymbolName, Value, Size) )