Я попытался написать программу-загрузчик. Сначала я загружаю исполняемый образ и все его зависимые dll (включая kernel32.dll и ntdll.dll) в память , обработайте всю таблицу адресов импорта, перезапишите все данные, которые необходимо переместить.
Затем я вызываю EntryPoint всех изображений по порядку. Я получаю код возврата 0 от EntryPoint ntdll.dll, но kernel32.dll возвращает 0xC0000000. Когда я пытался вызвать EntryPoint исполняемого изображения , программа вылетела.
Я знаю, что система Windows уже загружает ntdll.dll и kernel32.dll в память процесса при создании процесса. Мой вопрос в том, как мне загрузить еще одну копию ntdll.dll и kernel32.dll в память и связать мой модуль с копируемыми.
Я провожу эксперимент: 1. скопируйте ntdll.dll -> a.dll
Можно ли сделать a.exe работает правильно?
Это мой первый вопрос о переполнении стека, извините за плохой английский. Спасибо.