Сверхбыстрый импорт API-функций

       

содержимое таблицы адресов — эффективные виртуальные адреса импортируемых функций!


Благодаря этой хитрости, системному загрузчику уже не нужно тратить время на импорт функций. Он просто смотрит на поле временной отметки (TimeDateStamp) импортируемой DLL и если оно совпадет с DLL, установленной на компьютере, реальный импорт _не_ производится. В противном случае, конечно, приходится напрягаться и тратить такты процессора на загрузку, но Microsoft обновляет свои прикладные приложения синхронно с обновлением системных библиотек, поэтому ее программы получают огромное преимущество над конкурентами. Какое коварство!!!

Такая техника импорта функций называется биндингом (binding) и при желании может быть реализована с помощью утилиты editbin, позаимствованной все из того же компилятора (editbin /BIND test.exe). Посмотрим, что она сделала с нашим тестовым файлом? А сделала она с ним вот что:

Dump of file test.exe

KERNEL32.dll

              405000 Import Address Table

              4054AC Import Name Table

              44B17B02 time date stamp Mon Jul 10 01:54:10 2006

              13 Index of first forwarder reference

7944639C      2DF  WriteFile

79450D1D      174  GetVersion

794569BE      7D   ExitProcess



Содержание раздела