![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Форумчанин
Регистрация: 18.04.2009
Сообщений: 688
|
![]()
Необходимо в таблицу импорта dll добавить новую запись об импортируемой функции. Я прочитал статью как это сделать (кому интересно вот она http://zalil.ru/32543884)
Но по ней нормально получилось сделать только до момента: получение виртуального адреса (преобразованного виртуального адреса!) таблицы импорта. Это я получил на строке 262. Вопросов по этому нет. Но далее. Необходимо осуществить запись о новой импортируемой функции из новой dll. Я осуществил проверку, достаточно ли места в секции чтобы вставить еще 2 массива IMAGE_IMPORT_DESCRIPTOR. Если места недостаточно то программа идет к метке об ошибке и вызвывает ExitProc. Но тут встал вопрос. Как грамотно надо добавить данные в таблицу импорта. Я нашел статью в Интернете: http://bugtraq.ru/library/programming/harddll.html Посмотрел код, там оказалось очень много непонятного на данном моменте, например: Код:
а начиная с Код:
Но зачем для этого кучу левых структур создавать? Да и к тому же, там совершенно разные поля: Код:
Можете на пальцах пояснить, как дальше осуществить запись в таблицу импорта по шагам? Я уже эти мануалы по PE-формату проштудировал не один раз, так что можно ссылку на описание не кидать))) Пописал маленькие программки из туториалов по ассемблеру на эту тему и из цикла статей "от зеленого к красному тоже". P.S. Вот код который я настрочил, правда он недоработанный и с этой 262 строки конкретная недоделка идет. http://zalil.ru/32543970 И еще хотел спросить. В статье, которую я в архиве выслал написано, что нужно добавить будет не только структуру IMAGE_IMPORT_DESCRIPTOR, но еще "нужно создать и заполнить массивы по адресам OriginalFirstThunk и FirstThunk". И что самое простое решение - перенести в конец какой-нибудь секции". То есть, например, мы находимся в секции .text, нужно найти начало следующей секции и конец важных данных в .text, кстати КАК ЭТО ПРАВИЛЬНО СДЕЛАТЬ? Последней структурой в .text будет IMAGE_IMPORT_BY_NAME? и нужно посмотреть сколько после нее свободного пространства? Так? А если не хватит для добавления еще одной записи? Ведь такое же тоже может случиться? Тогда кусками в разные секции пихать что ли? Поясните, пожалуйста, поподробней. Заранее спасибо за помощь. Подскажите кто чем может, пожалуйста. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Добавить (изменить) данные в БД | arthur1 | БД в Delphi | 13 | 25.10.2011 23:04 |
Есть ли способ добавить/удалить элемент в дереве DBGridEh и соответственно изменить запись в базе данных? | xorornot | Общие вопросы Delphi | 0 | 13.07.2011 11:22 |
Форма с кнлпками Добавить/Изменить/Удалить запись | P.A.S.C.A.L. | Microsoft Office Access | 1 | 26.06.2011 21:11 |
Добавить запись в DBGrid | adil | БД в Delphi | 7 | 27.07.2010 12:50 |
C#: Добавить, Изменить и удалить строку в бд | Veiron | Общие вопросы .NET | 1 | 10.06.2009 09:25 |