Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> класс, расположение атрибутов в памяти 
:(
    Опции темы
ccop
Дата 1.7.2009, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.4.2008

Репутация: нет
Всего: нет



есть программа, у программы есть классы, исходника программы нет, надо определить структуру класса. Предположим программа уже запущенна и работает. С помощью ArtMoney можно узнать адреса отдельных атрибутов объекта класса.
вопрос: можно ли как-то узнать адреса других элементов?

не могу подобрать запрос в поисковике, что бы хоть что-то найти, поэтому буду рад за любую интересную инфу. спасибо!

Это сообщение отредактировал(а) ccop - 1.7.2009, 19:41
PM MAIL   Вверх
jonie
Дата 1.7.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



пробуйте в гугле волшебные слова: IDA, HIEW, OllyDBG, мозг, SoftICE, windbg,  assembler и идите по ссылкам. А это раздел про С\С++, и вам не сюда.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ccop
Дата 1.7.2009, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.4.2008

Репутация: нет
Всего: нет



jonie, спасибо, я создал в разделе С++, потому что нужно именно для С++, т.е. нужно учитывать спецификации С++, как, например, организована таблица виртуальных функций и т.п. Я думаю, здесь тоже что-то такое есть, типа: при создании объекта адреса всех атрибутов сохраняются в какой-то таблице. Или как у структуре, они создаются подряд...
PM MAIL   Вверх
andrew_121
Дата 1.7.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(jonie @  1.7.2009,  20:02 Найти цитируемый пост)
мозг

Атжег! smile

Добавлено через 1 минуту и 10 секунд
Цитата(ccop @  1.7.2009,  20:48 Найти цитируемый пост)
Я думаю, здесь тоже что-то такое есть, типа

Да. Но это форум по написанию/созданию программ. А тебе нужно наоборот.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
GoldFinch
Дата 1.7.2009, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



артмани, лол
IDA+olly юзай

Добавлено через 4 минуты и 40 секунд
вкратце:

объекты - это обычные структуры данных, чтобы получить какое-то поле, надо к адресу объекта прибавить смещение поля smile
чтобы получить смещение - его надо гдето подсмотреть
PM MAIL ICQ   Вверх
ccop
Дата 1.7.2009, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.4.2008

Репутация: нет
Всего: нет



Ребята, извините, что немного промахнулся с форумом, но задумка была вот такая:
мне надо написать программу на С++, которая бы "ловила" данные с памяти другой программы, т.е. просто дизассемблировать программу я думаю не получиться, я узнаю только структуру класса (и то если узнаю smile), а вот если 
Цитата
с помощью артмани узнать адрес одного атрибута, по адресу найти какую-то таблицу где храняться адреса на другие атрибуты объекта, то все было бы отлично
 - вариант, конечно мне кажется маловероятным, но поэтому я и спросил, что бы вы либо подтвердили это и сказали типа да оно так и работает, либо опровергли smile
Спасибо всем кто отписался  smile 
PM MAIL   Вверх
GoldFinch
Дата 1.7.2009, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Цитата(ccop @  1.7.2009,  22:06 Найти цитируемый пост)
"ловила" данные с памяти другой программы

Я думаю, что данные ловят только юзвери, юзая проги типа артмани. 
Программисты ловят код. Для этого код дизассембилуется, ищутся места где производится доступ к необходимым переменным, и этот код перехватывается. 
Адрес переменной удобно "искать" если она в статической памяти. Если переменная в хипе или в стеке, ее можно найти только перехватив ее конструктор, или код ее создающий, или код ее использующий.
Да, для полиморфных объектов можно просканировать всю память, ища указатель на таблицу виртуальных методов (ВМТ) класса, который будет в начале искомого объекта, но это неоптимально.

PM MAIL ICQ   Вверх
ccop
Дата 1.7.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.4.2008

Репутация: нет
Всего: нет



GoldFinch, понял Вашу мысль, буду разбираться, спасибо!
PM MAIL   Вверх
DrHex
Дата 2.7.2009, 00:35 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



Во первых вы говорите о декомпиляции, а декомпилировать С++ код практически не возможно....

Декомпилируется как правило статический код то и есть исполняемый файл, а вот виртуальную память, декомпилировать, задача в принципе не решаемая(ну или очень с большим опытом реверсинга, а уровень опыта у автора явно не велик). 


Цитата

Да. Но это форум по написанию/созданию программ. А тебе нужно наоборот. 


На форуме обсуждаются вопросы связаные с С/С++, а для нормального понимания С++ требуется знаний что, где и как.


P.S.

ccop - можете не разбиратся, вы не решите эту проблему(может быть лет через 5 при глубоком изучению, но проблема будет уже устаревшой)..........
--------------------
google.com и это все.
PM MAIL   Вверх
GoldFinch
Дата 2.7.2009, 08:26 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Цитата(DrHex @  2.7.2009,  01:35 Найти цитируемый пост)
виртуальную память, декомпилировать

ты не знаешь о чем говоришь.
PM MAIL ICQ   Вверх
azesmcar
Дата 2.7.2009, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(GoldFinch @  1.7.2009,  20:58 Найти цитируемый пост)
надо к адресу объекта прибавить смещение поля smile
чтобы получить смещение - его надо гдето подсмотреть 

Надо, только и про выравнивание структур не надо забывать.


Это сообщение отредактировал(а) azesmcar - 2.7.2009, 09:09
PM   Вверх
ccop
Дата 2.7.2009, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.4.2008

Репутация: нет
Всего: нет



azesmcar, огромное спасибо за ссылку по теме! очень полезная информация.

другим, ваши ответы мне тоже помогли навести порядок в голове, некоторые моменты я уже понял, буду разбираться. Всем огромное спасибо, если будут еще интерессные ссылки по теме, пожалуйста, буду рад smile 

ЗЫ
Я новичек, но не такой как могло показаться smile, если надо, я разбирусь smile 
PM MAIL   Вверх
Lazin
Дата 2.7.2009, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(azesmcar @  2.7.2009,  09:06 Найти цитируемый пост)
Надо, только и про выравнивание структур не надо забывать.

и про указатель на таблицу вирт. функций
PM MAIL Skype GTalk   Вверх
azesmcar
Дата 2.7.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Lazin @  2.7.2009,  09:48 Найти цитируемый пост)
и про указатель на таблицу вирт. функций 

И про виртуальный базовый класс (если уж на то пошло) smile 
PM   Вверх
GoldFinch
Дата 2.7.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Lazin
azesmcar
какое выравнивание? какой указатель на ВМТ?
там будет 
Код

mov eax, someStruct
mov eax, [eax+Struct.x]

где Struct.x  - смещение нужного поля, например 0x3C
что находится вокруг этого поля - нас волновать не должно,

в коде это будет выглядеть
Код

struct Struct
{
  char stuff[0x3C];
  int x;
}


в ряде случаев можно будет написать просто 
int x=*(int*)((char*)ptr +0x3C);
без объявления структур

в конце концов код можно и из hex-rays скопировать

Это сообщение отредактировал(а) GoldFinch - 2.7.2009, 10:58
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1052 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.