Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
f_address = (DWORD)(exportAddressTableRVA[f_index] + pBaseAddress);
// поиск "разрывов" в таблице адресов
if (f_address == pBaseAddress) continue;
// определение оридинала
ordinal = f_index + ordinalBASE;
// поиск форвардов (если есть)
if ((f_address > (DWORD) pExport) && (f_address < (DWORD) (pExport + xExport)))
pForward = (BYTE*)f_address; else pForward = 0;
// вывод результатов на терминал
printf("%-30s [%03d/%03d] %08Xh %s ",
name, ordinal, a, f_address, (pForward)?pForward:"");
} printf("============================================== ");
Импорт
Если с экспортом все более или менее понятно, то импорт – это какой-то кошмар. Это целых три различных механизма, один страшнее другого, управляемые четырьмя записями в DATA_DIRECTORY.
Стандартный механизм импорта работает приблизительно так: специальная таблица (называемая таблицей импорта) перечисляет имена/ординалы всех импортируемых функций, указывая, в какое место страничного имиджа загрузчик должен записать эффективный адрес каждой из них. Грубо говоря, на каждую импортируемую функцию приходится один вызов GetProcAddress, фактически сводящийся к поэлементному перебору всей таблицы экспорта.