MSVC отключить создание exception directory

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 8 Sep 2016.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Народ, мож кто знает как отключить этот гребаный exception directory в MSVC для PE64
    В общем в чем суть: msvc при компиляции проги под x64 создает exception directory.
    При этом вся фишка в том, что в проге __try __except не юзается а содержимое exception directory по факту это таблица всех функций в виде АДРЕС-РАЗМЕР-КАКАЯТОХРЕНЬ
    Можно конечно вручную удалять из PE адрес этой таблицы и потом затирать в файле её содержимое, но это как-то не по феншую.
    А то мало того что почти 5 килобайт съедает бесцельно, так еще и палит разположение и размер функций.
    Перерыл все возможные настройки - нигде нет ничего подобного. Знаю только то, что это именно компилятор делает, а не линкер.
     
  2. pas9x

    pas9x Elder - Старейшина

    Joined:
    13 Oct 2012
    Messages:
    423
    Likes Received:
    585
    Reputations:
    52
    На ц++ я не пишу. Но знаю, что в нормальных языках (таких как ява, например) устанавливается глобальный обработчик эксепшенов.
    Нагуглил это http://stackoverflow.com/questions/...tion-handler-for-visual-studio-2010-vspackage
    Соответственно, в msvc нет возможности поставить глобальный хендлер эксепшенов. Писать код надо по нормальному а не закрывать глаза на ошибки.
    По моему всё прекрасно гуглится.
     
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    1) Я спрашивал именно по С/С++ а не яву. Если мне нужен будет глобальный обработчик, то в моем распоряжение 2 апишки которые с этим справляются.
    2) Гуглить я и сам умею но решения с /gx и /saveseh и /EH* - ни дают никакого результат. По этому и спросил.
     
  4. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Не уверен, что у тебя получится их убрать. PE64 работает только с табличной обработкой эксепшенов.

    Вот это является записью в таблице Exception Directory: https://msdn.microsoft.com/en-us/library/ft9x1kdx.aspx, где третье поле (какая-то хрень) - это вот https://msdn.microsoft.com/en-us/library/ddssxxy8.aspx.

    Вот здесь есть подробнее об этом: https://habrahabr.ru/company/xakep/blog/260577/ (в подразделе x64)