Форум программистов, компьютерный форум CyberForum.ru

Глобальная переменная из другой dll - C++

Восстановить пароль Регистрация
 
headcrab
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 15
24.03.2013, 03:19     Глобальная переменная из другой dll #1
Имеется сторонняя dll без исходников. Мне нужно в своей программе получить значение глобальной переменной из той длл.
Через IDA нашел, как она используется:
mov eax, dword_21C
в .data секции той dll по оффсету 0x21C находится нужная переменная. Найти и прочитать из памяти этот оффсет для меня не проблема. Как теперь в своей программе получить значение той переменной?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2013, 03:19     Глобальная переменная из другой dll
Посмотрите здесь:

C++ Глобальная переменная
C++ Глобальная переменная
Глобальная переменная C++
C++ Глобальная переменная(не пойму как точно сделать)
C++ Динамический массив как глобальная переменная
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.03.2013, 10:56     Глобальная переменная из другой dll #2
Цитата Сообщение от headcrab Посмотреть сообщение
Найти и прочитать из памяти этот оффсет для меня не проблема.
Расскажете как?
headcrab
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 15
25.03.2013, 12:50  [ТС]     Глобальная переменная из другой dll #3
Цитата Сообщение от Tulosba Посмотреть сообщение
Расскажете как?
Там все просто оказалось, это я затупил. Пример:

Находим через IDA участок кода, где используется нужная переменная:
Код
8B 0D 34 2F E7 01               mov     ecx, dword_1E72F34
Где 34 2F E7 01 - это адрес, который нужно прочитать. Нам нужно найти в памяти загруженной библиотеки адрес первого байта (34). Это либо по сигнатуре, либо по смещению в нужной длл. Я делал по сигнатуре, чтобы при каждом обновлении заново не искать ничего. Нужная мне переменная была типа int*
Код
void* address // это найденный в dll адрес, по которому находится адрес нужной переменной
unsigned long var_addr = *( unsigned long *)( address ); // читаем оттуда адрес глобальной переменной
int* my_var = *( int **)( var_addr ); // по адресу глобальной переменной читаем значение типа int*
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.03.2013, 14:12     Глобальная переменная из другой dll #4
Т.е. известен адрес, по которому записан адрес, по которому записан (int*)?
headcrab
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 15
25.03.2013, 16:58  [ТС]     Глобальная переменная из другой dll #5
Верно.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.03.2013, 17:06     Глобальная переменная из другой dll #6
Тогда почему бы не использовать просто:
C++
1
int* my_var = *(int**)address;
?
headcrab
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 15
25.03.2013, 17:19  [ТС]     Глобальная переменная из другой dll #7
По адресу address находится не нужная переменная, а её адрес, используемый в инструкции mov. А уже по нему мы найдем саму переменную.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.03.2013, 17:33     Глобальная переменная из другой dll #8
Прошу прощение, промахнулся. Вот так тогда:
C++
1
int* my_var = **(int***)a;
headcrab
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 15
25.03.2013, 17:39  [ТС]     Глобальная переменная из другой dll #9
Так можно. В моем примере просто более понятно расписано. И там не обязательно int* же, можно и любую другую переменную найти.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2013, 17:54     Глобальная переменная из другой dll
Еще ссылки по теме:

Глобальная переменная для хранения вещественных чисел C++
Глобальная переменная не читается в новом потоке C++
C++ Глобальная переменная

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.03.2013, 17:54     Глобальная переменная из другой dll #10
Не спорю. Просто баланс между компактностью кода и его понятностью штука довольно сложная
Yandex
Объявления
25.03.2013, 17:54     Глобальная переменная из другой dll
Ответ Создать тему
Опции темы

Текущее время: 15:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru