Просмотр экспортов
Просмотр и работа с экспортированными данными.
Чтение экспортов модулей из образа процесса
Запустите этот верхнеуровневый C# Script в EyeAuras с загруженным модулем памяти. Входы — имя процесса EyeAuras.exe и загруженный модуль kernel32.dll; при нескольких процессах поиск по имени выберет первый. Для точного выбора используйте известный PID с LocalProcess.ByProcessId. Нужны права чтения выбранного процесса.
В предыдущих руководствах мы уже научились получать список модулей запущенного процесса.
Этого достаточно, чтобы читать часть информации из них, но современные игры устроены гораздо сложнее: в них тысячи структур и методов. Здесь и помогают публичные экспорты — данные, которые DLL экспортируют наружу и которые указывают на конкретные места в бинарном файле.
Пример
using EyeAuras.Memory;
using EyeAuras.Memory.Scaffolding;
using (var process = LocalProcess.ByProcessName("EyeAuras.exe"))
{
Log.Info($"Process: {process.ProcessName} ({process.ProcessId})");
var modules = process.GetProcessModules();
Log.Info($"Modules: {modules.Count()}");
using var kernel32Mem = process.MemoryOfModule("kernel32.dll");
var kernel32Exports = kernel32Mem.ReadExports();
Log.Info($"Kernel 32 exports: {kernel32Exports.DumpToNamedTable("Exports")}");
var loadLibraryA = kernel32Exports.FirstOrDefault(x => x.ExportName == "LoadLibraryA");
Log.Info($"LoadLibraryA: {loadLibraryA}");
}
В EventLog попадут сведения о процессе и таблица экспортов загруженного PE-образа. MemoryOfModule — представление адресов модуля, а не копия DLL с диска; процесс должен оставаться открытым. ReadExports также возвращает экспорты только по ordinal и перенаправления: проверяйте IsForwarder/ForwarderName, прежде чем считать запись адресом исполняемого кода. Наличие имени не доказывает, что по нему можно безопасно вызвать функцию. using закрывает созданный читатель процесса; представление модуля его не заменяет.
Дальше
Контекст скрипта · Процессы и память · Примитивы памяти
Контракты сверены со срезом EyeAuras 20fd3d4 и PoeEye 0e02c98. Полные сигнатуры смотрите в SDK/XML своей версии; наличие символа не подтверждает доступность внешнего пакета или нативного компонента. Пример здесь не проверялся компиляцией или запуском.