Можно ли добавить таблицу импорта в таблицу импорта? - PullRequest
0 голосов
/ 09 июня 2011

Я пишу на C, и я хочу знать, возможно ли добавить Imports в любой скомпилированный EXE из уже импортированной библиотеки, например, EXE Imports

Kernel32.dll
GetFileSize (), FindNextFileA, FindFirstFileA

Есть ли способ добавить еще одну функцию в этот список?Допустим, например, CreateMutexA?

1 Ответ

0 голосов
/ 03 марта 2012

Помещение элементов в так называемую «таблицу импорта» - это задача компилятора (компоновщика), когда он обнаруживает, что компилируемое приложение статически связано с библиотекой, поскольку оно использует определенную функцию. В вашем примере приложение, которое вы скомпилируете, вызывает API CreateMutexA и затем будет статически связано с Kernel32.lib. Когда загрузчик запустит ваше приложение, он обнаружит, что ваше приложение статически связано с Kernel32.lib из-за присутствия FindNextFile в таблице импорта и имени библиотеки (kernel32.dll) в таблице импорта, а затем поиск наличия Kernel32.dll, который, конечно, всегда присутствует уже загружен в память). Наличие элемента в таблице импорта означает, что API будет вызван (рано или поздно). Отсутствие элемента в таблице импорта означает, что API не будет вызываться (если только вы не используете LoadLibrary и GetProcAdress - то есть, используя динамическую библиотеку динамических ссылок!)

НЕТ, нет никакого конкретного API, который можно было бы вызвать, чтобы «искусственно» добавить элемент в таблицу импорта. Теоретически вы могли бы сделать это - если вы говорите на PE - напрямую, изменив (обманув) изображение, но это уже другая история, поскольку вам нужно будет отрегулировать размер модифицированного раздела PE, который содержит таблицу импорта!

...