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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hex Editor и созданная библиотека, Как найти данные в бинарном файле? 
V
    Опции темы
Molodec
Дата 14.1.2011, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте!
Создаю библиотеку .dll для одной из игр с помощью загруженного SDK и Visual C++ 6.0.
Меня интересует следующий вопрос, например, при создании переменной как мне отследить по какому смещению он будет записана в бинарном файле. То есть, объявляю переменную типа int a=0; Как мне отследить это самое значение - 0 в бинарном файле с помощью Hex редактора? Например, чтобы в любой момент поместить туда другое значение потом?
Есть ли такая возможность? Заранее благодарен.
PM MAIL   Вверх
Cheloveck
Дата 14.1.2011, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Читай переменные из файла, не городи чушь.


--------------------
user posted image
PM Jabber   Вверх
jonie
Дата 14.1.2011, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Molodec, если переменная статическая, то выведя ее адрес (VA) можно получить адрес смещения реального в exe-шке. В общем читать по теме: PE формат и http://stackoverflow.com/questions/2170843...virtual-address например (там есть ключевые моменты).


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


Бывалый
*


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

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



Цитата(jonie @  14.1.2011,  21:08 Найти цитируемый пост)
если переменная статическая, то выведя ее адрес (VA) можно получить адрес смещения реального в exe-шке.

А можете на счёт этого немного подсказать, как вывести виртуальный адрес? 
Открыл сейчас dll через exam diff pro и он выстроил модель, заголовки, адреса и т. д. И я так понял это перечислены смещения переменных? Хотя, могу ошибаться:
Код

 379. Relocation Block:
    VirtualAddress:  0x0017B000  (".rdata")
    SizeOfBlock:     0x000002CC  (0x0162 block entries)

    RVA        Type
    ---------- -----------------
    0x0017BA0C HIGHLOW
    0x0017BA10 HIGHLOW
    0x0017BA14 HIGHLOW
    0x0017BA18 HIGHLOW
    0x0017BA1C HIGHLOW
    0x0017BA20 HIGHLOW
    0x0017BA24 HIGHLOW
    0x0017BA28 HIGHLOW
    0x0017BA2C HIGHLOW

И таких блоков довольно много. Статьи почитал. Но пока что не совсем со всем разобрался. Поэтому прошу небольшой подсказки. 

PM MAIL   Вверх
jonie
Дата 15.1.2011, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Molodec
Код

    std::cout<<"addr:"<<std::hex<<&var
        <<", val:"<<var
        <<", base:"<<std::hex<<GetModuleHandle(NULL);
ну а дальше вычисляйте зная VA.


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


Бывалый
*


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

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



jonie, спасибо Вам большое. Понял. Но в игре создается много объектов, в которых есть эта переменная и следовательно много адресов получается. И все они разные. Это же касается .ехе?
Я о std::cout<<"addr:"<<std::hex<<&var
А при самой компиляции можно как-то просмотреть где будет храниться стандартное значение переменной в dll? То значение, что было задано при инициализации?
------------
Но я вывожу вот таким вот образом:
CPrintF(TRANS("%x killed"),GetModuleHandle(NULL));
Специальный компилятор, через который проходят файлы и который генерирует из них *.cpp файлы, понимает эту запись. А Вашу, к сожалению, нет. 
Код

error C2653: 'std' : is not a class or namespace name
error C2146: syntax error : missing ';' before identifier 'cout'
fatal error C1004: unexpected end of file found




Это сообщение отредактировал(а) Molodec - 15.1.2011, 21:54
PM MAIL   Вверх
jonie
Дата 16.1.2011, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

Понял. Но в игре создается много объектов, в которых есть эта переменная и следовательно много адресов получается. И все они разные. Это же касается .ехе?

Вы читаете что я говорю или нет?
Цитата

Molodec, если переменная статическая, то выведя ее адрес (VA) .....


Для переменных класса конечно так не получится, т.к. они размещены в куче.

Цитата


Специальный компилятор, через который проходят файлы и который генерирует из них *.cpp файлы, понимает эту запись. А Вашу, к сожалению, нет. 
стремный компилятор. Не языка С++ это уж точно.



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


Бывалый
*


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

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



jonie, прошу прощения. Сразу и не понял, о чем именно речь была.
На счёт компилятора - он принимает специальные файлы. Написаны они не на С++, но на Си подобном языке. То есть, синтаксис похож, но стандартных объектов и их методов нет. Например, весь #include берется из своих файлов, а не из стандартных С++. 
Спасибо за то, что постарались мне помочь. Жаль, безусловно, что нет способа, хотя, все возможно. Подожду хотя бы до среды. 
Потом, если что, помечу вопрос как решенный. 
PM MAIL   Вверх
Molodec
Дата 30.3.2011, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Molodec @  17.1.2011,  00:10 Найти цитируемый пост)
Подожду хотя бы до среды. 

Думаю, стоит пометить как решенный. Чтобы другие разработчики времени не тратили. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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