![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Давай ты не будешь обобщать. Я говорю про конкретную область, про PE формат. Предложенная тобой библиотека экономит 2-3 строки кода на самых элементарных вещах, для которых ничего городить не надо(может хватит уже бросаться столь страшными словами, это убедительности в споре со мной нисколько не придаёт). Если человек не знает как работают эти функции, он работать с PE не сможет. Поэтому прицнип твой в данном случае не работает. Ради 2-3х функций никакая библиотека здесь нафиг не сдалась. Добавлено через 4 минуты и 28 секунд А в общем случае согласен, что велосипеды -- зло. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
во первых, предложил ее не я, а майкрософт во вторых, корректность базы, определение сигнатур DOS и PE заголовков в пару операций ни как не уложишь, а это уверенность в корректности PE в данном случае это библиотека, значит ни о какой фиксированной компановке этого PE не может быть и речи, exe-шник его несущий, может быть любой, как корректный так и нет, если программа свалится в этой длл из-за того, что ее PE поврежден или не соответствует принятому в dll стандарту, значит виноват не разработчик программы, а разработчик dll, он не позаботился о таких вариантах исхода. я предпочитаю вещи называть своими именами, хотя последнее предложение ближе в тему, причем от темы PE я пока не отклонялся, это единственная причина, почему я участвую в обсуждении
я ни коим образом не пытаюсь ни кого запугать, не вижу смысла, я лишь пытаюсь объяснить целесообразность использования этой API взамен ручным расчетам PE популярным языком, то-же самое майкрософт рекомендует делать при расчете RVA->VA, хотя это правило тоже присутствует в спецификации, тем не менее, майкрософт идет к нам навстречу и предлагает свои услуги в соответствии API своей спецификации. зачем мне делать повторную работу майкрософт (к тому же небезопасную), если уместно использование API? вопрос риторический -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
GremlinProg, что "фильтруй"?
1) как некорректный exe-шник может оказаться в памяти? 2) что значит "принятому в dll стандарту"? 3)какой смысл в функции которая возвращает сумму аргумента и константы или которая возвращает сумму двух аргументов? |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
GoldFinch, в таких случаях, пост нужно отредактировать, а не создавать новый,
что фильтровать ты уже понял некорректный не может, а с непредсказуемым содержимым PE, которое не учитывается в твоей dll, но пропускает загрузчик - вполне примеры, которые ты приводил для определения PE не соответствуют определению NT-заголовка, поскольку не соответствует спецификации, поэтому стандарт ты сам себе и заводишь в dll NT-заголовок, как и DOS - маркируются сигнатурами, при соответствии которых спецификации, они и считаются соответственно NT и DOS
смысл я уже объяснил пару-тройку раз, не вижу смысла повторять, попробуй перечитать тему -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
GremlinProg, так вот как раз мой код, который работает так же как и загрузчик заголовок разберет, а твой, который по офиц. спецификации вылетит с ошибкой.
кстати разницы нет, вылетит твой код с критом или выдаст ошибку о том что не может разобрать формат, задача всеравно не будет решена |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
загрузчик следует спецификации, а твой код - нет
а функция с ошибкой не вылетит, в случае несоответствии стандарту, она вернет NULL и установит при этом официальный код ошибки Win32, на которую всегда можно сослаться при объявлении причины отказа в работе, то же самое касается и остальных функций по работе с PE. ты сам должен анализировать результат работы функции, что и подразумевает поддержку спецификации от майкрософт -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
GremlinProg, тебе надо задачу решать, а не багрепорты собирать
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
именно для того, чтобы не собирать багрепорты и нужно использовать одну функцию, которая все сделает правильно -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| shara |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
ого
фигасе, не думал что моя тема вызовет столь жаркие споры... а если я ее зарание не знаю, могу ли я ее сначала прочитать (эту последовательность) ну скажем пару десятков символов, где-то сохранить а потом по ней уже определять "мой" это экзкшник или не "мой"? по памяти вылетать не буду? -------------------- с точки зрения аэродинамики шмель не может летать |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
shara, 0x1000 байт можешь читать спокойно
dos stub не может быть больше 64кбайт |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Уважаемые сэры! А вам не приходило в голову, что каждый конкретный код пишется прежде всего для того, чтобы решить одну маленькую задачу в большой череде задач различной сложности.
Возможно, по эфективности решение использовать "прямые вычисления" vs API функций и получше. И разобраться в устройстве PE-формата тому, кто туда лезет, тоже неплохо. НО. Использование функций API - самодокументировано. А если там будет написано "адрес A" + "смещение B", то придется писать комментарий. Ах, я забыла, все настолько крутые, что по арифметическому выражению сразу поймут, что там написано. Ну так подумайте о тех, кто будет поддерживать этот код после вас. Хорошо написанный код должен читаться как рассказ об применяемом алгоритме, без лишних подробностей. Конечно, бывают случаи, когда нужно что-то круто оптимизировать. Но разве этот случай такой?
Я часто именно так и делаю. Особенно, если вычисление идет через добывание переменных из структур\классов. Причем называю функцию так, чтобы она ясно читалось в контексте общего алгоритма. Короче, поддерживаю мнение GremlinProg. -------------------- ... |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
А кто предлагает писать арифметику?
Вы видите здесь хоть одно число? Эта функция возвращает указатели на основные структуры PE файла, производя все необходимые базовые проверки и даже чуть больше. И для человека работающего с PE она прозрачна и понятна, к тому же platform-independent. Это сообщение отредактировал(а) W4FhLF - 17.1.2009, 10:42 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
И к тому же что, надо мне получить указатель на IMAGE_NT_HEADER, я использую API, а если надо на IMAGE_FILE_HEADER, API такой нет, писать свою функцию придётся. Так в чём смысл использования этих 2-3х API для работы с PE, которые нам предлагает Windows?
Вот выше я уже выложил функцию для получения основных структур(в неё включён функционал ImageHlp.ImageNtHeader), теперь могу выложить ещё две функции для работы с PE из этой библиотеки. Это если кто-то опять начнёт "зачем изобретать велосипед". -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
в любом случае это сведется к тому, что кто-нибудь дизасемблирует ваш код, найдет место где происходит проверка и забьет его инструкциями nop
Добавлено @ 12:51 у меня есть другой вариант: часть функционала, без которого программа не может работать отправляется в службу, работающую в режиме ядра, а эта служба учится работать с лицеднзиями и проверять легальность копии =) в этом случае сломать то-же возможно, но сложнее Это сообщение отредактировал(а) Lazin - 17.1.2009, 13:01 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |