Сейчас на форуме: _MBK_, Adler (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Адрес dll
Посл.ответ Сообщение

Ранг: 10.7 (новичок)
Активность: 0.020
Статус: Участник

Создано: 07 октября 2011 15:29
· Личное сообщение · #1

Всем привет! С помощью Stud PE добавил в импорт некоторой программы свою dll-ку. Хочу сделать вызов функции, которая находится в моей dll. Но запустив пару раз программу под OllyDbg увидел, что dll-ка не всегда находится под одним адресом. Один раз под 6FC40000, другой раз под 711A0000. Поэтому я не могу привязать CALL к стабильному адресу функции. Подскажите пожалуйста, как мне быть в этой ситуации?




Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 07 октября 2011 15:37
· Личное сообщение · #2

На каком языке программирования пишется dll ?

-----
StarForce и Themida ацтой!




Ранг: 38.1 (посетитель), 4thx
Активность: 0.030
Статус: Участник

Создано: 07 октября 2011 16:18
· Личное сообщение · #3

да, если функция одна можно код функции вписать (как вариант)




Ранг: 88.2 (постоянный), 111thx
Активность: 0.070.01
Статус: Участник

Создано: 07 октября 2011 16:26
· Личное сообщение · #4

GetModuleHandle & GetProcAddress ?

| Сообщение посчитали полезным: Dynamic

Ранг: 10.7 (новичок)
Активность: 0.020
Статус: Участник

Создано: 07 октября 2011 16:50 · Поправил: Dynamic
· Личное сообщение · #5

Maximus пишет:
На каком языке программирования пишется dll ?

На С++

nevertime пишет:
да, если функция одна можно код функции вписать (как вариант)

Несколько функций

Airenikus пишет:
GetModuleHandle & GetProcAddress ?

Как вариант подойдет. Спасибо.

Я заметил, что меняется очередность dll в памяти. Почему так происходит? Почему не меняется очередность dll-ок, на функции которых в коде есть жесткие ссылки?



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 07 октября 2011 17:13
· Личное сообщение · #6

Dynamic пишет:
Но запустив пару раз программу под OllyDbg увидел, что dll-ка не всегда находится под одним адресом


И не будет
ОС делает rebasing для dll
Dynamic пишет:
Поэтому я не могу привязать CALL к стабильному адресу функции. Подскажите пожалуйста, как мне быть в этой ситуации?


А для етого есть релоки + relocation table

| Сообщение посчитали полезным: Dynamic

Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 07 октября 2011 17:42
· Личное сообщение · #7

sendersu пишет:
А для етого есть релоки + relocation table

Это не поможет - он из exe вызывает функцию из dll, dll всегда грузится по разным адресам и дельта между call в exe и адресом функции в dll будет разной.
Для этого вообще экспортируемые функции в dll и таблицу импорта в exe придумали.

| Сообщение посчитали полезным: SReg, Dynamic

Ранг: 10.7 (новичок)
Активность: 0.020
Статус: Участник

Создано: 07 октября 2011 18:04
· Личное сообщение · #8

cppasm пишет:
Для этого вообще экспортируемые функции в dll и таблицу импорта в exe придумали.

Мои функции в dll экспортируемые, и добавлены в таблицу импорта exe.

Каким образом мне производить вызов экспортируемой функции из dll, независимо от адреса загрузки dll ?



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 07 октября 2011 18:06 · Поправил: tihiy_grom
· Личное сообщение · #9

Dynamic пишет:
Мои функции в dll экспортируемые, и добавлены в таблицу импорта exe. Каким образом мне производить вызов экспортируемой функции из dll, независимо от адреса загрузки dll ?


Airenikus пишет:
GetModuleHandle & GetProcAddress ?




Ранг: 10.7 (новичок)
Активность: 0.020
Статус: Участник

Создано: 07 октября 2011 18:17
· Личное сообщение · #10

Этот вариант я буду применять в крайнем случае.

Поэтому интересует, какой механизм работает для других экспортируемых функций из dll. Или Вы считаете что для каждого вызова экспортируемых функций используется GetModuleHandle & GetProcAddress ?




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 07 октября 2011 18:28
· Личное сообщение · #11

Используется таблица импорта. По нормальной схеме нужно добавлять в импорт не только dll, но и экспортируемые из неё функции и добалять переходники. В коде делать прыжки не на абсолютные адреса, а на переходники, в которые реальные адреса подставит загрузчик.

-----
Следуй за белым кроликом


| Сообщение посчитали полезным: Dynamic

Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 07 октября 2011 18:30
· Личное сообщение · #12

Так если функции импортируются, и вызывай через импорт.

| Сообщение посчитали полезным: Dynamic


Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 07 октября 2011 18:51
· Личное сообщение · #13

Почти все ехе используют импорт из других длл, возьми и погляди, как там сделано. Загрузчик заполняет таблицу импорта валидными адресами, ехе уже из импорта эти адреса дёргает для вызова.

| Сообщение посчитали полезным: Dynamic

Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 07 октября 2011 18:52
· Личное сообщение · #14

ещё как вариант, грузи dll через LoadLibrary, потом к eax прибавляй смещение нужной тебе функи.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 07 октября 2011 19:09
· Личное сообщение · #15

Я думаю ТСу надо почитать матчасть по PE формату, он даже базовых вещей не понимает.

-----
Yann Tiersen best and do not fuck




Ранг: 10.7 (новичок)
Активность: 0.020
Статус: Участник

Создано: 07 октября 2011 19:17
· Личное сообщение · #16

Всем большое спасибо.

Посмотрел как вызываются другие функции, и сделал так же для своей.


 eXeL@B —› Вопросы новичков —› Адрес dll
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати