песочница в виде PE модуля

Тема в разделе "WASM.BEGINNERS", создана пользователем yos196, 16 авг 2019.

  1. yos196

    yos196 New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2017
    Сообщения:
    17
    Допустим, есть некий модуль, с расширением dll. В котором есть одна единственная экспортируемая функция, которая стартует поток с ООП абстракцией. Вопрос в следующем - если в этой абстракции возникло исключение, как его можно скипнуть, прочистить родительский процесс от этого модуля. Грубо говоря, если в dll рождается что-то попадающееся на обработчик, установленный через AddVectorExceptionHandler, то выгрузить из процесса ЭТОТ модуль (dll), и начать заново. Что кроме кучи еще нужно предосмотреть?
     
    Последнее редактирование модератором: 17 авг 2019
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    эмм... как бы любые открытые ресурсы нужно закрыть... модуль может создать/открыть файл, секцию, мьютекс, окна и тд и тп...
     
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.955
    По-моему изящней будет запускать отдельный процесс, загружающий эту длл, и синхронизироваться с ним через пайпы. А в случае чего сносить весь процесс. Разом решает все проблемы.
     
    UbIvItS нравится это.
  4. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.173
    Адрес:
    подполье
    Вех не из данной длл решит проблему исключений, тк это будет Ловушка для всех исключений процесса. по срабатыванию из адресного пространства длл- вынос библиотеки. Выгрузить не проблема.но чо там вам ооп загрузит каких куч, и шобы вам не терять память на каждой длл, лучше вообще ознакомиться с тем, чо делает длл лично. Если правильно вас понял я
    --- Сообщение объединено, 17 авг 2019 ---
    консоль есчо запустите, линупсомышление ёп
    --- Сообщение объединено, 17 авг 2019 ---
    Ой, наверное проще всё. Вы ловите на вех исключение, в обработчике уточняете адресное пространство в котором оное произошло, если оное есть длл, то выгружаете её, а в длл на коллбэке детач (знаете, наверное про калбэки в длл? С них код библиотек обычно и начинают) освобождаете всё чо было занято данным модулем
     
  5. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.955
    Как раз для этого проще создать отдельный процесс, все хендлы будут гарантированно закрыты, утечек памяти и любых других сюрпризов не будет. А изобретая велосипед можно надолго в это закопаться (без нужды) и в итоге работать только на ХР например будет :blum2: Если это линуксомышление (хз как они мыслят на самом деле), то хрен с ним пусть будет так называться, зато быстро и с гарантированным результатом.
     
    Rel нравится это.
  6. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.173
    Адрес:
    подполье
    вех и коллбэки в длл работать будут везде. велосипед (пртом канадский (с квадратными колёсами) изобретаете вы с процессами и пайпами(пздц же вощще)). есть конешн вброс по поводу того, что библиотека с функцией не принадлежит организатору темы и править код он так просто не может. Тогда сложнее и придёццо искать таки ему подводные камни
     
  7. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.955
    DllMain обычной дллки с инициализацией crt. Выбери такую же и поищи пару недель в ней камни.
     

    Вложения:

  8. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.087
    соприкосновение с таким мышлением ведёт к безумию потребителей вЫнЬдЫ :)
    кстати, не совсем ясно, что значит "начать заново"..

    1. продолжить работу проги уже без ЭТОГО модуля?
    2. перезапустить весь процесс?
     
  9. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.173
    Адрес:
    подполье
    я чо тут шоле? бро, да мне насрать как он это решит, но мы с тобой решать этого друг с другом не должны, я прав?
     
  10. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.087
    Кот, всё идёт своим путём :)
     
  11. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.173
    Адрес:
    подполье
    Будто бы сходило не только лишь с, но и из
    так говорить нельзя, на самом деле, зря мы
     
  12. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.955
    Просто чтоб поржать открыл диспетчер задач и увидел 21 процесс opera.exe. Почуяв неладное запустил ишака и вижу по одной копии iexplore.exe на каждую открытую вкладку. Утирая пот ушанкой запускаю хром, а там 11 процессов при запуске, усыхающие до 7 штук через несколько секунд. Линуксомыслящие уже среди нас!
     
  13. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    f13nd, это печально на самом деле. Просто сейчас такое время, что память можно не экономить, и создавать процесс хоть на каждый edit. Но, я вот 2 года сидел за древними компами (ну как древними - 10 летней давности, 2гб памяти), и там тот же хром на 10 вкладках вешает систему наглухо (по крайней мере, ничего кроме браузера уже не запустишь). В винде немного другая история, как учит нас Рихтер, процесс отъедает много памяти, гораздо больше потока (и потоки то надо юзать реже, есть фиберы и прочие легковесные заменители). Но..всем , как обычно, пофиг.
     
  14. yos196

    yos196 New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2017
    Сообщения:
    17
    Выгрузить модуль освободить занятые им ресурсы,и загрузить его снова отправив в работу.Попросту говоря ищу безопасный перезапуска, некоего обьекта в памяти процесса при исключении.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    есть исходники модуля? если да, то модуль технически должен сам контролировать все ресурсы, в случае исключения их освобождать (в DLL_PROCESS_DETACH или в обработчике исключений - не важно)...
     
  16. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.955
    Я почти уверен, что в браузерах эта мера именно из-за высокой вероятности утечек памяти и хендлов и введена. Многократно сталкивался с тем, что поток не может нормально завершиться и крашит весь процесс где-то при освобождении ресурсов (приходилось GetCurrentThread+TerminateThread на выходе делать). В некоторых ком-компонентах даже при своевременном освобождении всех объектов память куда-то утекает (особенно прекрасен в этом плане MS SQL Server через odbc, им просто невозможно переработать базу в несколько гигабайт за одну сессию). В этих условиях вполне разумно разделять задачи на разные процессы, время от времени пересоздавая их.
     
    UbIvItS нравится это.
  17. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.087
    если есть исходники модуля, то все нужные операции по высвобождению ресурсов вполне можешь прописать в обработчике прерывания. Если сорцов нет, то вариант f13nd самый лучший в плане отсутствия лишних заморок.
    Ты, пожалуйста, не сравнивай старый инет с современным == тогда бравзер от силы гифки обрабатывал, а теперь бравзер -- еть страшОннЫй мультимедия комбайн и, кстати, весят дико в основном не процессы самого хромого, а подгружаемый контент + наличие аддонов тожЪ увеличивает вес да тормознутость его процессов, а без аддонов опять же плохо :) что касательно "процесс против пАтока", ты никогда не сделаешь прогу на потоках такой стабильной и безопасной акь на процессах.
     
  18. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    в хроме и других браузерах это сделанно из соображений безопасности, типа изоляций вкладок друг от друга, как-будто запуска в лоуинтегрити было недостаточно... но как бы пора бы уже перестать жить прошлым, в современных реалиях 10 процессов на одно приложение - это норма, все равно будет работать быстрее, чем один процесс джавы например))...
    --- Сообщение объединено, 19 авг 2019 ---
    хорошо легковесные процессы реализованы в BEAM (виртуальная машина Erlang'а), вот там их можно хоть миллионами плодить и прибивать, при этом все работает достаточно быстро... канеш физически это реализовано через потоки операционной ссистемы и асинхронную обработку сообщений, отсылаемых между процессами виртуальной машины... сверху работает планировщик, который при необходимости создает такое минимальное количество потоков операционной системы, какое нужно для нормальной обработки всех сообщений... при этом задействуются ядра процессора... как бы мне очень хотелось бы посмотреть, как бы выглядили современные операционные системы, если бы такие процессы были реализованы на уровне системы, а не программно... все бы программировали драйверы и прикладное ПО в совсем другой парадигме...
     
  19. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.087
    :)
    Однако ж, справедливости ради стоит отметить, что в таких описаниях имеются явные спекуляции == асинх. сообщения - еть всё же форма шаровой памяти, просто размер мессаг фиксированный и обмен может происходить по наиболее быстрым путям. Но всё резко меняется, когда проц. должен координировать работу разных железок с различными протоколами управления и тогда обходиться короткими мессагами не получится.
    upload_2019-8-19_23-40-12.png
    chrome://flags
    всяк страждущий может прекратить сие "безобразие", однако будут возникать проблемы с капризными аддончиками, да и на сайтах сюрпризы могут оказаться :)
     
  20. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.173
    Адрес:
    подполье
    каждыя жаба свой эрланг хвалит. а все почему? потому что каждый эрланг хвалит свою жабу. а всё почему? потому что гладиолус и есчо потомучто, почему бы и нет. лучше уж о этом думать, чем устремлять взгляды в бесконечные споры
     
    UbIvItS нравится это.