eXeL@B —› Программирование —› Библиотека для работы с Portable Executable (C++) |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 08 сентября 2012 13:24 · Поправил: Kaimi · Личное сообщение · #1 Основные фичи библиотеки: [+] Чтение 32-разрядных и 64-разрядных PE-файлов (PE, PE+) для Windows, возможность единообразной работы с обоими форматами [+] Создание PE/PE+ файлов с нуля [+] Пересборка 32-разрядных и 64-разрядных PE-файлов [+] Работа с директориями и заголовками [+] Конвертирование адресов [+] Чтение и редактирование секций PE-файла [+] Чтение и редактирование таблицы импортов [+] Чтение и редактирование таблицы экспортов [+] Чтение и редактирование таблиц релокаций [+] Чтение и редактирование ресурсов [+] Чтение и редактирование TLS [+] Чтение конфигурации образа (image config) [+] Чтение базовой информации .NET [+] Чтение информации о привязанном импорте [+] Чтение директории исключений (только PE+) [+] Чтение отладочной директории с расширенной информацией [+] Вычисление энтропии [+] Изменение файлового выравнивания [+] Изменение базового адреса загрузки [+] Работа с DOS Stub'ом и Rich overlay [+] Высокоуровневое чтение ресурсов: картинки, иконки, курсоры, информация о версии, строковые таблицы, таблицы сообщений [+] Высокоуровневое редактирование ресурсов: картинки, иконки, курсоры, информация о версии Словом, все, что вы хотели сделать с PE, но боялись спросить, как. Весь код библиотеки снабжен обильными комментариями на английском языке. В проект включено 25 примеров работы с библиотекой, которые показывают, как работать с той или иной частью библиотеки (комментарии на русском языке). Имеются солюшены для MSVC++ 2008 и 2010. Справочной информации пока нет, возможно, соберусь ее как-нибудь написать. Библиотека не использует WinAPI или другие библиотеки, только STL. Библиотека и примеры собираются под Windows x86 и x64, но для того, чтобы работать с PE+, собирать под x64 необязательно. Библиотека не исполняет считываемые файлы, не маппит их в память, поэтому с ее помощью можно спокойно открывать подозрительные исполняемые файлы и работать с ними. Теперь собирается еще и под Linux. Проект залит на code.google.com на случай возможных правок и улучшений, так как сейчас библиотека в стадии альфа-версии. Автор: Репозиторий: Комментарии принимаются тут: 2970_08.09.2012_EXELAB.rU.tgz - pe_lib.zip | Сообщение посчитали полезным: SWR, gena-m, mak, Dynamic, r_e, ntldr, NikolayD, SReg, _ruzmaz_, =TS=, Gideon Vi, MasterSoft, BAHEK, sivorog, vnekrilov, Functor, UniSoft, hlmadip, HandMill, plutos, Veliant, -= ALEX =-, elch, invalid, Artem_N, t0ShA, HiEndsoft, verdizela, obfuskator, tomac, sendersu, nick8606, MarcElBichon, ValdiS, Coderess |
|
Создано: 12 октября 2012 21:54 · Личное сообщение · #2 <<Такое впечатление, что человек-тролль шпарит цитаты из какой-то книжки, а мы тут с ним спорим... Ну это не правда, я просто излагал свои мысли вслух. А ты хотел, чтобы я в свободное от работы время ещё смену отпахал и тебе код забесплатно написал с целью удивить и поразить... Скажи зачем деструкторы делают виртуальными в базовом классе, а потом поговорим о серьёзных вещах. А то может ты школьник Должен же быть фейс-контроль |
|
Создано: 12 октября 2012 21:56 · Поправил: F_a_u_s_t · Личное сообщение · #3 TheNozza Поддержу reversecode давайте свой код, а мы посмотрим и оценим, или назовите проекты в которых вы участвовали или проектировали иначе это просто ля ля и тупо троллинг. Add: Пока курил чеполино родил. Виртуальный деструкт нужен для удаления наследников, иди читай раскраски, ну или loki можешь почитать. |
|
Создано: 12 октября 2012 21:57 · Личное сообщение · #4 |
|
Создано: 12 октября 2012 22:13 · Личное сообщение · #5 <<давайте свой код, а мы посмотрим и оценим, или назовите проекты в которых вы участвовали или проектировали иначе это просто ля ля и тупо троллинг. Назовём вещи своими именами: Качество моего кода оценивает не огалделая публика, а Software Architect(есть такой спец). Вам желаю того же. open source я не пишу - больше повторять не буду. Троллинг по Вашему мнению - ну баньте, это ваше право, я от этого ничего не потеряю, мне параллельно. Я на Вас не работаю дорогие мои |
|
Создано: 12 октября 2012 22:18 · Личное сообщение · #6 TheNozza пишет: Качество моего кода оценивает не огалделая публика, а Software Architect(есть такой спец). бла бла ни очем а спеца Software Architect(есть такой спец) я бы еще проверил на проф пригодность, на rsdn где таких спецов как вы хоть Ж жуй, ни один не может пройти у другого проф пригодность, а люди там серьезней чем вы)) и работают в приличных компаниях, так что доморощеный вы мой, забыл откуда там вы?... пЕйШите свой код для вашего архитектора дальше)) |
|
Создано: 12 октября 2012 22:19 · Личное сообщение · #7 TheNozza пишет: Качество моего кода оценивает не огалделая публика, а Software Architect Да да, назовем вещи своими именами либо вы тормоз, либо медленный газ, какие в опу архитекторы в своем проекте который пилится в свободное время? У вас что, нет домашнего кода в виде утилит и прочих мелочей? В бросы по азам тоже мимо. Ваш слив засчитан. Посмотри степашку с хрюшей и иди спать, завтра в школу рано вставать. |
|
Создано: 12 октября 2012 22:30 · Личное сообщение · #8 <<У вас что, нет домашнего кода в виде утилит и прочих мелочей? <<Посмотри степашку с хрюшей и иди спать, завтра в школу рано вставать. Ты тупой что ли, я дома на компе проприентарные исходники не держу - они находятся в репозиториях системы контроля версий, к которым ты хрен с улицы доступ получишь, сборка на build-серверах проходит, после чего бинарь продают - примерно так упрощённо... |
|
Создано: 12 октября 2012 22:33 · Поправил: Модератор · Личное сообщение · #9 TheNozza пишет: Я на Вас не работаю дорогие мои TheNozza пишет: код забесплатно написал с целью удивить и поразить Ох, да сколько можно уже.. Человек - не только материальное существо...Ну в смысле разумный человек, а не тупорылый MacFriend с гордой татухой "Свободная касса""Спасибо, что без сдачи" во всю спину, к которым ты относишься... Зачем ты здесь? Вот скажи.. Какова твоя цель дальнейшего прибывания здесь? Так - пришел, насрал, и кончил от ничем необоснованного самомнения при написании своих постов... TheNozza пишет: Должен же быть фейс-контроль Ты его уже не прошел... P.S. В сотый раз хочу напомнить о предложении усожнения регистрации, с целью избавления от подобной деморализующей творческих людей ... ... От модератора: пост подкорректирован, половина поста, содержащая особую ненависть, вырезана |
|
Создано: 12 октября 2012 23:32 · Личное сообщение · #10 Весь топик уже зафлудили. Хорош уже, может. В идеале тут надо стирать 90% топика. Что касается TheNozza, последнее предупреждение, уже утомил забегать во все подряд топики, в том числе и многомесячной давности, и везде гнуть пальцы. Это вообще не разработчиков форум, если что. Что касается остальных, можно было поглядеть другие его посты и разобраться, что к чему. Или погуглить на ник ещё, если хочется. |
|
Создано: 15 октября 2012 00:00 · Поправил: sys_dev · Личное сообщение · #11 Kaimi 1) Перепиши плиз на Header-only. А то если честно ломает подключать *.cpp. В случае header-only достаточно будет один хидер с набором интерфейсных кинуть в precompiled.hpp , а то что относится к реализации в precompiled.cpp. Другими словами: Переписывание в Header-only вашей либы повлечет за собой легкое подключение ее в новые проекты! 2) Перейдите пожалуйста на GitHub или BitBucket. Оно того стоит! Сам сейчас юзаю Mercurial и после SVN не понимаю, как я последний вообще юзал, он же из ряда вон неудобный! Могу помочь в освоении 3) В коде фабрики увидел "static std::auto_ptr<pe_base>" это деприкейтед, юзаейте std::unique_ptr или boost::unique_ptr 4) Штука pe_bliss::pe_resource_viewer кажется слишком большой и возникает вопрос: а не слишком ли много она умеет? Может следует пересмотреть ее ответственность и разбить на более мелкие сущности? Если же все-таки ломает, то думаю имеет смысл добавить хотя бы фасадные классы для часто используемых задач |
|
Создано: 15 октября 2012 00:42 · Личное сообщение · #12 sys_dev пишет: 1) Перепиши плиз на Header-only. А то если честно ломает подключать *.cpp. В случае header-only достаточно будет один хидер с набором интерфейсных кинуть в precompiled.hpp , а то что относится к реализации в precompiled.cpp. Другими словами: Переписывание в Header-only вашей либы повлечет за собой легкое подключение ее в новые проекты! 2) Перейдите пожалуйста на GitHub или BitBucket. Оно того стоит! Сам сейчас юзаю Mercurial и после SVN не понимаю, как я последний вообще юзал, он же из ряда вон неудобный! Могу помочь в освоении 3) В коде фабрики увидел "static std::auto_ptr<pe_base>" это деприкейтед, юзаейте std::unique_ptr или boost::unique_ptr 4) Штука pe_bliss::pe_resource_viewer кажется слишком большой и возникает вопрос: а не слишком ли много она умеет? Может следует пересмотреть ее ответственность и разбить на более мелкие сущности? Если же все-таки ломает, то думаю имеет смысл добавить хотя бы фасадные классы для часто используемых задач 1. Это же жесть, столько кода в хедерах размещать +) Да и зачем подключать cpp? Собрал либу и линкуешься с ней. 2. Разница в чем для такого маленького проекта? В нем не будет большого количества ветвей, которые надо слеплять, или чего-то подобного. SVN для меня очень удобен, потому что я пользуюсь в нем одной кнопкой. 3. Это не деприкейтед, это совместимость с C++03. Иначе я бы и лямбды давно поюзал и auto как минимум. А буст юзать ради одной вещи тоже не буду, пусть либа будет независимая. Тем более, бустовые смартпоинтеры конструируются из std::auto_ptr. 4. pe_resource_viewer работает только с ресурсами и имеет много вложенных типов. Делить не вижу смысла. Отдельно вынесен pe_resource_manager, который pe_resource_viewer плюс высокоуровневое редактирование ресурсов. Странно, что вас не смутил мегакласс pe_base, который умеет еще больше |
|
Создано: 15 октября 2012 13:35 · Личное сообщение · #13 >>Это же жесть, столько кода в хедерах размещать +) Вы боитесь? Думаете медленнее компиляция будет? Если да , то замерьте! Не сильно, я по этой причине(боязнь долгой компиляции) не юзал Boost и понаписал докучи костылей и велосипедах, о чем жалею. У хидер-онли куда больше преимуществ чем у подхода хидер-либфайл. >>Разница в чем для такого маленького проекта? Сейчас маленький, но при таком извратном формате с достаточно большим кол-вом нюансов рискует вырасти в большой! "SVN для меня очень удобен", когда-то и я так утверждал и получил справедливое "руки у тебя из жопы", сейчас понимаю как в то время это метко было сказано. Меркуриал имеет больше преимуществ для повседневной работы чем SVN. Замечу еще раз для обыденной и повседневной работы обычного программера, а не "сферический конь в вакууме выдуманный теоретиками". Попробуйте и потом , после хотя бы месяца работы попробуйте повторить еще раз: "SVN для меня очень удобен" >>Это не деприкейтед, это совместимость с C++03. Давайте еще все ПО для Win 98 портировать из соображений совместимости? Да и если уж про C++03 пошла речь, вы не заметили еще один вариант "boost::unique_ptr". >>Тем более, бустовые смартпоинтеры Которые значительно лучше работают чем std::auto_ptr !!! Не надо думать что вы один умный, а бусто-девелоперы мудаки. >>Странно, что вас не смутил мегакласс pe_base, который умеет еще больше До него не добрался ))) |
|
Создано: 15 октября 2012 14:27 · Поправил: reversecode · Личное сообщение · #14 |
|
Создано: 15 октября 2012 16:31 · Поправил: GRRRL Power · Личное сообщение · #15 sys_dev, странные аргументы у вас. 1. Весь код в хедере равносилен нечитаемому интерфейсу, как минимум, кроме замедления компиляции, да. А "боязнь долгой компиляции" и из-за этого неюзание годных вещей - это уже сугубо ваша проблема. 2. Ничего кроме "SVN лажа и меркуриал рулит" я не увидел. Никаких доводов, примеров, в чем реально преимущества, и почему я внезапно должен взять и все перевести на другую систему контроля версий, если меня и эта устраивает. 3. Глупый сарказм, 11-е плюсы только-только приняли и компиляторы даже не все фичи пока что из них поддерживают. А про буст я уже сказал - не буду я его вклинивать в либу ради одного мелкого класса. Кстати, так любимый вами буст, и в самых древних компиляторах собирается, как раз под Win95. 4. Опять то же самое - "лучше, круче, лажа, говно". std::auto_ptr задумывался для того, чтобы возвращать указатели из функций безопасно, и он с этой задачей отлично справляется. Не нравится он вам - сконструируйте из него свой unique_ptr сразу после вызова фабрики. Я писал уже, что в бустовых смартпоинтерах конструкторы из auto_ptr присутствуют. В auto_ptr, в конце концов, есть метод release, делайте с указателем, что хотите. |
|
Создано: 15 октября 2012 16:43 · Личное сообщение · #16 |
|
Создано: 15 октября 2012 16:57 · Личное сообщение · #17 sys_dev пишет: А зачем я должен писать преимущества этого тута Например потому, что ты это предлагаешь. а предлагая что-то - нужно как минимум опиать плюсы и аргументированно доказать целесообразность этого, я даже не буду учитывать, что в идеале еще и самому принять участие в допиливании тобой предложенной идеи... |
|
Создано: 15 октября 2012 17:02 · Поправил: Kaimi · Личное сообщение · #18 Открыл гугл, получил по первой ссылке следующий перечень отличий: Git is much faster than Subversion Subversion allows you to check out just a subtree of a repository; Git requires you to clone the entire repository (including history) and create a working copy that mirrors at least a subset of the items under version control. Git's repositories are much smaller than Subversions (for the Mozilla project, 30x smaller) Git was designed to be fully distributed from the start, allowing each developer to have full local control Git branches are simpler and less resource heavy than Subversion's Git branches carry their entire history Merging in Git does not require you to remember the revision you merged from (this benefit was obviated with the release of Subversion 1.5) Git provides better auditing of branch and merge events Git's repo file formats are simple, so repair is easy and corruption is rare. Backing up Subversion repositories centrally is potentially simpler - since you can choose to distributed folders within a repo in git Git repository clones act as full repository backups Subversion's UI is more mature than Git's Walking through versions is simpler in Subversion because it uses sequential revision numbers (1,2,3,..); Git uses unpredictable SHA-1 hashes. Walking backwards in Git is easy using the "^" syntax, but there is no easy way to walk forward. Расскажите пожалуйста, какие преимущества Git крайне важны для небольшого проекта, который поддерживает ровно один человек? |
|
Создано: 15 октября 2012 17:02 · Личное сообщение · #19 |
|
Создано: 07 ноября 2012 20:17 · Личное сообщение · #20 Библиотека обновлена, апну темку. Поправлено много багов, код разбит на независимые куски и отрефакторен. Добавлены юнит-тесты. Всё по-прежнему собирается под VS2008, VS2010 и GCC под nix. Качать, как обычно, |
|
Создано: 07 ноября 2012 20:46 · Личное сообщение · #21 |
|
Создано: 07 ноября 2012 21:17 · Личное сообщение · #22 Если бы у меня был билдер, я бы запилил, чтобы собиралось, а ставить ради только этого пока желания нет. Скорее всего, дефайны неправильно разруливают операционку и считают, что билдер - это *nix. Если Вам будет не лень, можно попробовать в файле pe_structures.h в самом начале сделать, чтобы дефайн PE_BLISS_WINDOWS выставлялся и для билдера. |
|
Создано: 07 ноября 2012 23:11 · Личное сообщение · #23 GRRRL Power Скорее разногласие билдера с богом и стандартом. Портянка с жалобами: Code:
Да и в печь его, соберу dll в студии с нужным функционалом, будет быстрее чем задротствовать со сборкой в билдере. |
|
Создано: 07 ноября 2012 23:51 · Личное сообщение · #24 Нене, эти ошибки - мой косяк. Я забыл пару ненужных (после рефакторинга) файлов удалить из либы, pe_32_64.h и cpp. Уже перезалил архив. | Сообщение посчитали полезным: =TS= |
|
Создано: 08 ноября 2012 01:15 · Личное сообщение · #25 GRRRL Power Проверил на import, export, норм работает (без напильника), думаю можно в список компиляторов и builder добавить. | Сообщение посчитали полезным: GRRRL Power |
|
Создано: 08 ноября 2012 12:26 · Личное сообщение · #26 |
|
Создано: 08 ноября 2012 14:16 · Личное сообщение · #27 sendersu sendersu пишет: какой именно? Их много всяких за историю понавыпускали... Ну я же выше писал что builder xe на всей этой линейке должно нормально собираться, еще бы builder 2009 проверить, тоже скорее всего должно работать, на самом деле если считать не версии выпуска, а по поддержки стандарта, то версий, раз, два и все, до 2009 врядли будет работать там еще std 98 если память не изменяет. |
|
Создано: 08 ноября 2012 14:55 · Поправил: sendersu · Личное сообщение · #28 F_a_u_s_t много народу еще на старичке C++Builder 6 катаются (я например поетому интересуюсь Спасибо upd покомпилировал чуток (C++Builder 6) пару замечаний по сборке в нем 1) #include <string.h> -> #include <cstring> 2) там где используется memcpy -> using std::memcpy; (внутри namespace pe_bliss) то же для memset 3) #if defined(_MSC_VER) #define PE_BLISS_WINDOWS #endif -> #if defined(_WIN32) && (defined(_MSC_VER) || defined(__BORLANDC__)) #define PE_BLISS_WINDOWS #endif 4) на етом кусочке typedef pe_types<pe_win::image_nt_headers64, pe_win::image_optional_header64, pe_win::image_nt_optional_hdr64_magic, uint64_t, pe_win::image_ordinal_flag64, pe_win::image_tls_directory64, pe_win::image_load_config_directory64> pe_types_class_64; падает [C++ Error] pe_properties_generic.h(255): E2397 Template argument cannot have static or local linkage конкретно не нравится параметр шаблона pe_win::image_ordinal_flag64 есть идеи как ето переписать? |
|
Создано: 11 ноября 2012 14:10 · Личное сообщение · #29 |
|
Создано: 11 ноября 2012 15:09 · Поправил: GRRRL Power · Личное сообщение · #30 HiEndsoft пишет: Import Adder - что-то после него не рабочий файл получается. Сложно сказать, что может быть не так. Пример бы, какой файл оказывается нерабочим, и еще код, как импорты пересобираете. Например, несколько версий назад в main.cpp примера import_adder ребилдер импортов был настроен так, чтобы обнулялась директория IMAGE_DIRECTORY_ENTRY_IAT, что могло привести к неработоспособности файла, потом я это убрал. sendersu, чтобы нормальную сборку под билдер 6-й сделать, надо по-хорошему и примеры и тесты под него перепиливать, а после этого еще проверить, чтобы все собиралось по-прежнему и в gcc и в студии. Я пока не собираюсь таким заниматься точно |
|
Создано: 12 ноября 2012 10:51 · Личное сообщение · #31 |
<< . 1 . 2 . |
eXeL@B —› Программирование —› Библиотека для работы с Portable Executable (C++) |