Здравствуйте Alex Fedotov, Вы писали:
AF>Здравствуйте ZakkeR, Вы писали:
AF>http://www.alexfedotov.com/code/null.exe
AF>Эта программа ничего не делает. Исходный код
AF>AF>extern "C" void __cdecl wmainCRTStartup()
AF>{
AF>}
AF>
AF>Поскольку kernel32.dll и ntdll.dll все равно загружаются в адресное пространство процесса (точка входа Win32-процесса вызывается из kernel32.dll), то их адреса можно найти в PEB, который всегда находится по адресу 0x7FFDF000. Зная адрес kernel32.dll уже нетрудно найти адреса LoadLibrary и GetProcAddress, после чего задача написания нетривиальной программы становится тривиальной (каламбурчик-с).
А не проще ли в EntryPoint'е PE модуля взять со стека адрес возврата — сие будет указывать куда-то в kernel32.dll... Дальше просто ищем начало PE header и разбираем таблицу импортов...
P.S. PEB лучше получить из TEB который всегда лежит по fs:[18h]
__asm
{
mov eax,fs:[18h] // TEB.NtTib.Self
mov eax,[eax][30h] // TEB.ProcessEnvironmentBlock
}