![]() |
eXeL@B —› Вопросы новичков —› Адрес dll |
Посл.ответ | Сообщение |
|
Создано: 07 октября 2011 15:29 · Личное сообщение · #1 Всем привет! С помощью Stud PE добавил в импорт некоторой программы свою dll-ку. Хочу сделать вызов функции, которая находится в моей dll. Но запустив пару раз программу под OllyDbg увидел, что dll-ка не всегда находится под одним адресом. Один раз под 6FC40000, другой раз под 711A0000. Поэтому я не могу привязать CALL к стабильному адресу функции. Подскажите пожалуйста, как мне быть в этой ситуации? ![]() |
|
Создано: 07 октября 2011 15:37 · Личное сообщение · #2 |
|
Создано: 07 октября 2011 16:18 · Личное сообщение · #3 |
|
Создано: 07 октября 2011 16:26 · Личное сообщение · #4 |
|
Создано: 07 октября 2011 16:50 · Поправил: Dynamic · Личное сообщение · #5 Maximus пишет: На каком языке программирования пишется dll ? На С++ nevertime пишет: да, если функция одна можно код функции вписать (как вариант) Несколько функций ![]() Airenikus пишет: GetModuleHandle & GetProcAddress ? Как вариант подойдет. Спасибо. Я заметил, что меняется очередность dll в памяти. Почему так происходит? Почему не меняется очередность dll-ок, на функции которых в коде есть жесткие ссылки? ![]() |
|
Создано: 07 октября 2011 17:13 · Личное сообщение · #6 Dynamic пишет: Но запустив пару раз программу под OllyDbg увидел, что dll-ка не всегда находится под одним адресом И не будет ОС делает rebasing для dll Dynamic пишет: Поэтому я не могу привязать CALL к стабильному адресу функции. Подскажите пожалуйста, как мне быть в этой ситуации? А для етого есть релоки + relocation table ![]() |
|
Создано: 07 октября 2011 17:42 · Личное сообщение · #7 sendersu пишет: А для етого есть релоки + relocation table Это не поможет - он из exe вызывает функцию из dll, dll всегда грузится по разным адресам и дельта между call в exe и адресом функции в dll будет разной. Для этого вообще экспортируемые функции в dll и таблицу импорта в exe придумали. ![]() |
|
Создано: 07 октября 2011 18:04 · Личное сообщение · #8 |
|
Создано: 07 октября 2011 18:06 · Поправил: tihiy_grom · Личное сообщение · #9 |
|
Создано: 07 октября 2011 18:17 · Личное сообщение · #10 |
|
Создано: 07 октября 2011 18:28 · Личное сообщение · #11 Используется таблица импорта. По нормальной схеме нужно добавлять в импорт не только dll, но и экспортируемые из неё функции и добалять переходники. В коде делать прыжки не на абсолютные адреса, а на переходники, в которые реальные адреса подставит загрузчик. ----- Следуй за белым кроликом ![]() |
|
Создано: 07 октября 2011 18:30 · Личное сообщение · #12 |
|
Создано: 07 октября 2011 18:51 · Личное сообщение · #13 Почти все ехе используют импорт из других длл, возьми и погляди, как там сделано. Загрузчик заполняет таблицу импорта валидными адресами, ехе уже из импорта эти адреса дёргает для вызова. ![]() |
|
Создано: 07 октября 2011 18:52 · Личное сообщение · #14 |
|
Создано: 07 октября 2011 19:09 · Личное сообщение · #15 |
|
Создано: 07 октября 2011 19:17 · Личное сообщение · #16 |
![]() |
eXeL@B —› Вопросы новичков —› Адрес dll |
Эта тема закрыта. Ответы больше не принимаются. |