![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
ccop |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.4.2008 Репутация: нет Всего: нет |
есть программа, у программы есть классы, исходника программы нет, надо определить структуру класса. Предположим программа уже запущенна и работает. С помощью ArtMoney можно узнать адреса отдельных атрибутов объекта класса.
вопрос: можно ли как-то узнать адреса других элементов? не могу подобрать запрос в поисковике, что бы хоть что-то найти, поэтому буду рад за любую интересную инфу. спасибо! Это сообщение отредактировал(а) ccop - 1.7.2009, 19:41 |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
пробуйте в гугле волшебные слова: IDA, HIEW, OllyDBG, мозг, SoftICE, windbg, assembler и идите по ссылкам. А это раздел про С\С++, и вам не сюда.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
ccop |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.4.2008 Репутация: нет Всего: нет |
jonie, спасибо, я создал в разделе С++, потому что нужно именно для С++, т.е. нужно учитывать спецификации С++, как, например, организована таблица виртуальных функций и т.п. Я думаю, здесь тоже что-то такое есть, типа: при создании объекта адреса всех атрибутов сохраняются в какой-то таблице. Или как у структуре, они создаются подряд...
|
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Атжег! ![]() Добавлено через 1 минуту и 10 секунд Да. Но это форум по написанию/созданию программ. А тебе нужно наоборот. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
артмани, лол
IDA+olly юзай Добавлено через 4 минуты и 40 секунд вкратце: объекты - это обычные структуры данных, чтобы получить какое-то поле, надо к адресу объекта прибавить смещение поля ![]() чтобы получить смещение - его надо гдето подсмотреть |
|||
|
||||
ccop |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.4.2008 Репутация: нет Всего: нет |
Ребята, извините, что немного промахнулся с форумом, но задумка была вот такая:
мне надо написать программу на С++, которая бы "ловила" данные с памяти другой программы, т.е. просто дизассемблировать программу я думаю не получиться, я узнаю только структуру класса (и то если узнаю ![]()
![]() Спасибо всем кто отписался ![]() |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Я думаю, что данные ловят только юзвери, юзая проги типа артмани. Программисты ловят код. Для этого код дизассембилуется, ищутся места где производится доступ к необходимым переменным, и этот код перехватывается. Адрес переменной удобно "искать" если она в статической памяти. Если переменная в хипе или в стеке, ее можно найти только перехватив ее конструктор, или код ее создающий, или код ее использующий. Да, для полиморфных объектов можно просканировать всю память, ища указатель на таблицу виртуальных методов (ВМТ) класса, который будет в начале искомого объекта, но это неоптимально. |
|||
|
||||
ccop |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.4.2008 Репутация: нет Всего: нет |
GoldFinch, понял Вашу мысль, буду разбираться, спасибо!
|
|||
|
||||
DrHex |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
Во первых вы говорите о декомпиляции, а декомпилировать С++ код практически не возможно....
Декомпилируется как правило статический код то и есть исполняемый файл, а вот виртуальную память, декомпилировать, задача в принципе не решаемая(ну или очень с большим опытом реверсинга, а уровень опыта у автора явно не велик).
На форуме обсуждаются вопросы связаные с С/С++, а для нормального понимания С++ требуется знаний что, где и как. P.S. ccop - можете не разбиратся, вы не решите эту проблему(может быть лет через 5 при глубоком изучению, но проблема будет уже устаревшой).......... --------------------
google.com и это все. |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Надо, только и про выравнивание структур не надо забывать. Это сообщение отредактировал(а) azesmcar - 2.7.2009, 09:09 |
|||
|
||||
ccop |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 21.4.2008 Репутация: нет Всего: нет |
azesmcar, огромное спасибо за ссылку по теме! очень полезная информация.
другим, ваши ответы мне тоже помогли навести порядок в голове, некоторые моменты я уже понял, буду разбираться. Всем огромное спасибо, если будут еще интерессные ссылки по теме, пожалуйста, буду рад ![]() ЗЫ Я новичек, но не такой как могло показаться ![]() ![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
и про указатель на таблицу вирт. функций |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Lazin,
azesmcar, какое выравнивание? какой указатель на ВМТ? там будет
где Struct.x - смещение нужного поля, например 0x3C что находится вокруг этого поля - нас волновать не должно, в коде это будет выглядеть
в ряде случаев можно будет написать просто int x=*(int*)((char*)ptr +0x3C); без объявления структур в конце концов код можно и из hex-rays скопировать Это сообщение отредактировал(а) GoldFinch - 2.7.2009, 10:58 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |