XEX-style exports, dumping exports, and prepping kernel export lookup.
This commit is contained in:
@@ -34,7 +34,7 @@ void ExportResolver::RegisterTable(const std::string& library_name,
|
||||
KernelExport* ExportResolver::GetExportByOrdinal(
|
||||
const std::string& library_name, const uint32_t ordinal) {
|
||||
for (const auto& table : tables_) {
|
||||
if (table.name == library_name) {
|
||||
if (table.name == library_name || table.simple_name == library_name) {
|
||||
// TODO(benvanik): binary search?
|
||||
for (size_t n = 0; n < table.count; n++) {
|
||||
if (table.exports[n].ordinal == ordinal) {
|
||||
|
||||
@@ -70,10 +70,18 @@ class ExportResolver {
|
||||
private:
|
||||
struct ExportTable {
|
||||
std::string name;
|
||||
std::string simple_name; // without extension
|
||||
KernelExport* exports;
|
||||
size_t count;
|
||||
ExportTable(const std::string& name, KernelExport* exports, size_t count)
|
||||
: name(name), exports(exports), count(count) {}
|
||||
: name(name), exports(exports), count(count) {
|
||||
auto dot_pos = name.find_last_of('.');
|
||||
if (dot_pos != std::string::npos) {
|
||||
simple_name = name.substr(0, dot_pos);
|
||||
} else {
|
||||
simple_name = name;
|
||||
}
|
||||
}
|
||||
};
|
||||
std::vector<ExportTable> tables_;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user