Получить смещение файла из функции загруженной DLL

Я хотел бы спросить, как я могу найти конкретный (Экспортируются) функция внутри DLL. Например, я хотел бы найти ReadProcessMemory внутри Kernel32. Я не хотел бы полагаться на таблицу импорта, я хотел бы найти различные API на основе их адресов, которые я получаю с помощью пользовательской функции.

Я попытался сделать небольшое исследование на VA, RVA & Смещение файла, но мне не удалось. Вот пример, который я пробовал, но он не работает (возвращает 0 во всех случаях):

DWORD Rva2Offset(DWORD dwRva, UINT_PTR uiBaseAddress)
{
WORD wIndex = 0;
PIMAGE_SECTION_HEADER pSectionHeader = NULL;
PIMAGE_NT_HEADERS pNtHeaders = NULL;

pNtHeaders = (PIMAGE_NT_HEADERS) (uiBaseAddress + ((PIMAGE_DOS_HEADER) uiBaseAddress)->e_lfanew);
pSectionHeader = (PIMAGE_SECTION_HEADER) ((UINT_PTR) (&pNtHeaders->OptionalHeader) + pNtHeaders->FileHeader.SizeOfOptionalHeader);

if (dwRva < pSectionHeader[0].PointerToRawData)
return dwRva;

for (wIndex = 0; wIndex < pNtHeaders->FileHeader.NumberOfSections; wIndex++)
{
if (dwRva >= pSectionHeader[wIndex].VirtualAddress && dwRva < (pSectionHeader[wIndex].VirtualAddress + pSectionHeader[wIndex].SizeOfRawData))
return (dwRva - pSectionHeader[wIndex].VirtualAddress + pSectionHeader[wIndex].PointerToRawData);
}

return 0;
}

Не могли бы вы помочь мне, как я мог выполнить эту простую задачу?

Спасибо.

P .: Я не придерживаюсь функции, описанной выше, и то, и другое, если вы можете указать, в чем проблема, или дать лучший источник, было бы здорово.

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]