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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Адрес начала программы, как получить адрес начала программы 
:(
    Опции темы
caliphornia
Дата 8.5.2011, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как в программе на С++ получить адрес начала этой программы в памяти, то место где располагается первая инструкция кода программы
PM MAIL   Вверх
volatile
Дата 8.5.2011, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

int main ()
{
   printf("%p\n", main);
}

Но это адрес мэйн. До него еще выполняется стартап из CRT.
Если хотите получить адрес вообще первой инструкции, то нужно парсить PE заголовок екзешника.
там есть поле точка входа, или entry point по-русски smile 

только зачем вам это надо?
PM MAIL   Вверх
caliphornia
Дата 8.5.2011, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а в приложениях Cbuilder какую функцию использовать?
PM MAIL   Вверх
volatile
Дата 8.5.2011, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(caliphornia @  8.5.2011,  12:37 Найти цитируемый пост)
 в приложениях Cbuilder какую функцию использовать? 

какую функцию. там вообще нет никаких функций.
main - это и есть указатель на функцию main.
void * p = main;
а уж вывести значение p можете куда угодно.
PM MAIL   Вверх
500mhz
Дата 8.5.2011, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



#include <imagehlp.h>
и там вообше то все описано


--------------------

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


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



caliphornia, 
Тебе следует понять что ты хочешь получить?

1) если адрес main() , то как уже выше писали
2) Если же EntryPoint, т.е. стартового кода, который настраивает с++ программу(rtti, heap, вызов main() и др.), то :
Код

   // Справедливо для Win программ
   IMAGE_DOS_HEADER* pDos = (IMAGE_DOS_HEADER*)(адрес загрузки модуля);
   IMAGE_NT_HEADERS * pNTHeaders = (IMAGE_NT_HEADERS *)pDos->e_lfanew + (адрес загрузки модуля);
   void * pEntryPoint = pNTHeaders->OptionalHeader.AddressOfEntryPoint;


PM MAIL WWW ICQ Jabber   Вверх
caliphornia
Дата 8.5.2011, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



задача стоит в том чтобы проверять исполняемый код на целостность(контрольная сумма), а для этого надо вначале получить этот самый код.
PM MAIL   Вверх
YDean
Дата 8.5.2011, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Адрес начала программы совпадает со значением hInstance.
Обычно, равен 0x400000 для exe.
PM   Вверх
Artemon
Дата 8.5.2011, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


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

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



caliphornia,  подозреваю что пытаетесь сделать какую-то защиту от взлома для программы, если так, то ваша задумка провальна уже на этом этапе  smile 


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
500mhz
Дата 9.5.2011, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



не проше ли сделать CRC всего ехешника а?


--------------------

PM MAIL ICQ   Вверх
caliphornia
Дата 9.5.2011, 10:19 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Artemon @ 8.5.2011,  21:41)
caliphornia,  подозреваю что пытаетесь сделать какую-то защиту от взлома для программы, если так, то ваша задумка провальна уже на этом этапе  smile

вообще зачем вы это написали???я же не просил высказать свое мнение по этому поводу, вопрос был четко поставлен, и я ожидал ответы по существу вопроса, мы же не в курилке находимся, что бы обсуждать что провалено а что нет...Если есть что добавить  буду благодарен, а такие сообщения писать не надо , только время тратить.
PM MAIL   Вверх
volatile
Дата 10.5.2011, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



caliphornia, я когда-то у Криса Касперского читал, что-то типа того.
щас поищу..

вот вроде бы нашел:
http://www.xakep.ru/magazine/xs/057/080/3.asp


PM MAIL   Вверх
Earnest
Дата 10.5.2011, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Цитата(caliphornia @  9.5.2011,  11:19 Найти цитируемый пост)
Если есть что добавить

Если ты намерен проверять образ, загруженный в память, то не забудь о такой мелочи, как фиксапы или базовые поправки. Это когда модуль загружается не по стандартному адресу, что почти всегда бывает с DLL. Фиксапы существенно меняют код, так что контрольная сумма меняется. Тут нужно либо учитывать поправки, что весьма геморройно. Или загружать по фиксированному адресу, что надежно только для exe.
А если проверять образ на диске, то проще посчитать CRC прямо по файлу, как уже было сказано. Но если это для защиты, то способ так себе, от первоклассников. 


--------------------
...
PM   Вверх
caliphornia
Дата 10.5.2011, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



огромное всем спасибо за помощь, теперь разобрался)))
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.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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