![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
подробнее - в нормальных программах первая секция - это секция кода, и ее rva равен 0x1000
размер 1й секции (кода) можно прочитать из таблицы секций в заголовке
|
|||
|
||||
| shara |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
GoldFinch,
я сколько не пытался так и не понял смысла этой строчки... и компилятор усиленно на нее ругается -------------------- с точки зрения аэродинамики шмель не может летать |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
а говориш формат PE файлов разобрал....
|
|||
|
||||
| shara |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
GoldFinch,
это да, но против компилятора не попрешь... сама идея понятна, вот с конкретной реализацией проблемы... в статьях что я нашел примеры не оч понятны -------------------- с точки зрения аэродинамики шмель не может летать |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
зачем тебе примеры если есть описание формата файла?
по смещению 0x3C находится raw offset PE заголовка, за PE заголовком находится таблица секций, тебе нужно поле SizeOfRawData первой секции, в нем лежит размер этой 1й секции в файле... Добавлено через 3 минуты и 33 секунды вот строчка которая должа компилиться int FirstSectionSize =*(int*)((char*)base+*(int*)((char*)base+0x3C)+0xF8+0x10); 0xF8 - размер PE заголовка, 0x10 смещение поля SizeOfRawData |
|||
|
||||
| shara |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
GoldFinch,
в общем эта строчка
но всеравно спасибо - я уже сам со всем разобрался. все таки PE штука классная. Главное узнать где он в файле начинается, отдельное спасибо за
потом берем нужную структуру из winnt.h и присваем ей нужный адрес... ну а дальше дело техники вопрос можно снимать. кстати тестил на в разных версиях Винды - контрольная сумма (хеш) одинакова. - т.е. идея заслуживает на жизнь пока все это писал, возник один вопрос: можно ли читать нужные мне биты файла, зная только начало PE заголовка + смещение нужного поля в структуре. тогда не нужно будет каждый раз работать со структурами а сразу читать байты из памяти по конкретному адресу. или все же для корректной работы в других ОС или возможно новых нововведениях в самой структуре PE лучше все оставить так как есть? -------------------- с точки зрения аэродинамики шмель не может летать |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
можно, pe формат никогда не поменяется, для 32-разрядных ОС по кр мере |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| shara |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
блин, столкнулся с проблемой
как можно узнать начало PE заголовка загруженного в память файла... у меня возникло бОльшое подозрение что GetModuleHandle(NULL) не всегда прав. пробовал искать РЕ по адресу 0х4000Е0 интересная штука получается, если любой файл откомпилить с опицей DEBUG то все нормально и PE находится по выше указанному адресу... компилю значит этот же файл с опцией RELIS и нифига - никакого PE по адресу 0х4000Е0 нет! че такое???? Добавлено через 1 минуту и 21 секунду jonie, всеже предпочитаю не использовать чужую либу, хочу сам разобраться -------------------- с точки зрения аэродинамики шмель не может летать |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
shara, ты вообще про PE формат читал?
raw offset (и rva) PE-заголовка находится по смещению 0x3C (поле IMAGE_DOS_HEADER.e_lfanew) Это сообщение отредактировал(а) GoldFinch - 15.1.2009, 21:43 |
|||
|
||||
| shara |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
вроде разобрался, для прийдешних поколений выкладываю простенький но рабочий исходник, который ищет сигнатуру PE в загруженном в память файле
Добавлено через 2 минуты и 57 секунд GoldFinch,
да да да а я гдето в одной из статей краем глаза увидел +0хE0 на там файле на котором все тестировал проконало. когда пошел дальше начались глюки ... бывает, я не волшебник и с РЕ работаю всего второй день)))) -------------------- с точки зрения аэродинамики шмель не может летать |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
да.. такими темпами ты нескоро чтонить толковое сделаешь...
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
GoldFinch, а ты вправе кому-либо на это указывать, узнав о спецификации незадолго до shara?
тем более с такими высказываниями shara, а это тебе место, где GoldFinch уже наступил на свои грабли и теперь зовет тебя на них наступить, чтобы ему не было так одиноко: http://forum.vingrad.ru/index.php?showtopi...t&p=1715653 дело, конечно твое, кого слушать, мое дело - предупредить ) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| shara |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
GremlinProg,
насчет использования ImageNtHeader я тоже подумывал, но мне важна скорость работы моего приложения потому-что оно будет запускаться очень много раз. а на работу АПИшных функций понадобиться время(пусть даже и не большое но это критичный параметр). решил все же использовать описание структур из файла Winnt.h и жестко к ним привязываться (жертвуем универсальностью за скорость) тут я согласен с GoldFinch что PE врядли измениться в актуальное время думаю что идея использованная мною в маленьком ЕХЕшнике описанном выше заслуживает на жизнь to GoldFinch, я это все пишу на работе, в рабочее время, т.е. многозадачность рулит -------------------- с точки зрения аэродинамики шмель не может летать |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |