Существуют ли инструменты, позволяющие удалить ненужные функции из DLL

Тема в разделе "WASM.RESEARCH", создана пользователем bondyara, 8 сен 2010.

  1. bondyara

    bondyara New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2009
    Сообщения:
    39
    Не хочется ковырять руками. Нужно удалить их из таблицы экспорта и удалить полностью их код, уменьшив размер.
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    напишите скрипт
     
  3. seniour_juggler

    seniour_juggler Member

    Публикаций:
    0
    Регистрация:
    27 дек 2009
    Сообщения:
    35
    Сложно и в общем случае работать не будет. Во-первых, не всегда можно точно на автомате определить точные границы функции. Как то встречал экспортируемую функцию, которая шарила часть своего тела с другой функцией :) Плюс релоки. Здесь же надо двигать функции для уменьшения размера. Во-вторых, встречается так, что, вроде как, релоков нет, но есть некий call на функцию, которая считает дельту, которая потом прибавляется к imm. Сдвинешь код - получишь exception. Где-то видел и точно помню, что это компилятор создавал.
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    bondyara
    Можно, но не всегда. Для этого по-мимо обязательных для этого релоков еще много чего надо!
     
  5. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    м.б. заполнить ненужный код nop-ами и запаковать в upx?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    bondyara
    Это пермутации задача. Для длл относительно проста(так как есть фиксапы) и очень эффективна. Передаёте список функций которые необходимо сохранить в двиг создающий граф, а затем компилите.
     
  7. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    seniour_juggler
    в осевых дллях.
    часто и густо такое компилеры лепят. а если на цэпэпэ, то и классы объединить могет, если они в одном/проинклуденных файлах.

    Clerk
    если экспорт длли вызывается из самой длли, то он будет вызываться относительно. те релоков не будет. чтобы знать точно надо трасить всю дллю. в том числе и случаи с регистрами. или надеяться на авось.

    овчинка выделки не стоит.
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    qqwe
    Релоки необходимы для анализа данных.
     
  9. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    кто ж спорит, что они удобны. но не на все они есть и приходится извращаться. (и это тоже не всегда проходит)
     
  10. seniour_juggler

    seniour_juggler Member

    Публикаций:
    0
    Регистрация:
    27 дек 2009
    Сообщения:
    35
    Двиг должен быть весьма продвинутым. Например, понимать, что идет вызов виртуальной функции, которую можно совсем случайно не распознать :) Свитчи также составляют некоторую проблему - для каждого компилятора есть свои нюансы с ними. Да и с исключениями не все так просто. Некоторые экспортируемые функции могут вызываться из нераспознанного блока запросто. Сложно решаемая задача в общем случае.