| 615 | } |
| 616 | |
| 617 | void LibraryManager::FindItemFuncsEoCPlugin() |
| 618 | { |
| 619 | Pattern p; |
| 620 | p.FromString( |
| 621 | "48 8B C8 " // mov rcx, rax |
| 622 | "48 89 5C 24 60 " // mov [rsp+0B8h+var_58.VMT], rbx |
| 623 | "E8 XX XX XX XX " // call esv__ParseItem |
| 624 | "33 D2 " // xor edx, edx |
| 625 | "48 8D 4C 24 60 " // lea rcx, [rsp+0B8h+var_58] |
| 626 | "E8 XX XX XX XX " // call esv__CreateItemFromParsed |
| 627 | ); |
| 628 | |
| 629 | p.Scan(moduleStart_, moduleSize_, [this](const uint8_t * match) { |
| 630 | auto parseAddr = AsmCallToAbsoluteAddress(match + 8); |
| 631 | ParseItem = (esv::ParseItem)parseAddr; |
| 632 | auto createAddr = AsmCallToAbsoluteAddress(match + 20); |
| 633 | CreateItemFromParsed = (esv::CreateItemFromParsed)createAddr; |
| 634 | }, false); |
| 635 | |
| 636 | if (ParseItem == nullptr || CreateItemFromParsed == nullptr) { |
| 637 | Debug("LibraryManager::FindItemFuncsEoCPlugin(): Could not find esv::CreateItemFromParsed"); |
| 638 | InitFailed = true; |
| 639 | } |
| 640 | } |
| 641 | |
| 642 | void LibraryManager::FindCustomStatsEoCPlugin() |
| 643 | { |
nothing calls this directly
no test coverage detected