XexGetProcedureAddress by name implemented.

This commit is contained in:
Dr. Chat
2015-05-04 17:38:34 -05:00
parent 78921c1a7e
commit 49c8efdc6d
8 changed files with 101 additions and 1 deletions

View File

@@ -34,5 +34,10 @@ void* XKernelModule::GetProcAddressByOrdinal(uint16_t ordinal) {
return NULL;
}
void* XKernelModule::GetProcAddressByName(const char* name) {
XELOGE("GetProcAddressByName not implemented");
return NULL;
}
} // namespace kernel
} // namespace xe

View File

@@ -24,6 +24,7 @@ class XKernelModule : public XModule {
virtual ~XKernelModule();
virtual void* GetProcAddressByOrdinal(uint16_t ordinal);
virtual void* GetProcAddressByName(const char* name);
protected:
Emulator* emulator_;

View File

@@ -27,6 +27,7 @@ class XModule : public XObject {
const std::string& name() const { return name_; }
virtual void* GetProcAddressByOrdinal(uint16_t ordinal) = 0;
virtual void* GetProcAddressByName(const char *name) = 0;
virtual X_STATUS GetSection(const char* name, uint32_t* out_section_data,
uint32_t* out_section_size);

View File

@@ -148,6 +148,17 @@ void* XUserModule::GetProcAddressByOrdinal(uint16_t ordinal) {
return NULL;
}
void* XUserModule::GetProcAddressByName(const char* name) {
PEExport export;
int ret = xe_xex2_lookup_export(xex_, name, export);
// Failure.
if (ret)
return NULL;
return (void *)export.addr;
}
X_STATUS XUserModule::GetSection(const char* name, uint32_t* out_section_data,
uint32_t* out_section_size) {
auto header = xe_xex2_get_header(xex_);

View File

@@ -33,6 +33,7 @@ class XUserModule : public XModule {
X_STATUS LoadFromMemory(const void* addr, const size_t length);
virtual void* GetProcAddressByOrdinal(uint16_t ordinal);
virtual void* GetProcAddressByName(const char* name);
virtual X_STATUS GetSection(const char* name, uint32_t* out_section_data,
uint32_t* out_section_size);