Как я могу обернуть ПОВЫШЕНИЕ отдельного пространства имен?

Если вы используете библиотеку JavaScript, рассмотрите Dojo Toolkit, который совместим (после незначительных изменений) с компиляцией расширенного режима Closure Compiler.

Dojo - Библиотека только JavaScript, совместимая с компилятором Closure

Код, скомпилированный с расширенным режимом Closure, практически невозможно перепрограммировать, даже проходя через декоратор, так как вся кодовая база кода (в том числе в библиотеке) обфускается , В среднем он также на 25%.

JavaScript-код, который просто минимизирован (YUI Compressor, Uglify и т. Д.), Легко реверсировать после прохождения через декодер.

9
задан Eclipse 23 September 2008 в 22:02
поделиться

3 ответа

Я читал (хорошо просканированный) посредством обсуждения списка разработки. Нет никакого легкого решения.Подводя итоги:

  1. Обертывание заголовочных файлов в объявлении пространства имен

    namespace boost_1_36_0 {
        #include <boost_1_36_0/boost/regex.hpp>
    }
    namespace boost_1_35_0 {
        #include <boost_1_35_0/boost/shared_ptr.hpp>
    }
    
    • Требует исходных файлов изменения
    • Не позволяет, чтобы обе версии были включены в ту же единицу перевода, вследствие того, что макросы не уважают пространства имен.
  2. Определение повышения прежде включая заголовки

    #define boost boost_1_36_0
        #include <boost_1_36_0/boost/regex.hpp>
    #undef boost
    #define boost boost_1_35_0
        #include <boost_1_35_0/boost/shared_ptr.hpp>
    #undef boost
    
    • Исходные файлы могут просто быть скомпилированы с -Dboost=boost_1_36_0
    • Все еще не обращается к макро-конфликтам в единственной единице перевода.
    • Некоторые внутренние включения заголовочного файла могут быть испорчены, так как этот вид вещи действительно происходит.

      #if defined(SOME_CONDITION)
      #  define HEADER <boost/some/header.hpp>
      #else
      #  define HEADER <boost/some/other/header.hpp>
      #endif
      

      Но может быть достаточно легко работать вокруг тех случаев.

  3. Изменение всей библиотеки повышения для замены namespace boost {..} с namespace boost_1_36_0 {...} и затем обеспечивая псевдоним пространства имен. Замените все BOOST_XYZ макросы и их использование с BOOST_1_36_0_XYZ макросы.
    • Это, вероятно, работало бы, если бы Вы были готовы поместить в усилие.
10
ответ дан 4 December 2019 в 13:51
поделиться

@Josh: В то время как я соглашаюсь с дрожанием, я все еще полагаю, что это - лучший план действий. Иначе связывающиеся проблемы являются уверенностью. У меня была ситуация прежде, где я должен был взломать скомпилированное использование библиотек objcopy избегать конфликтов определения. Это был кошмар по причинам совместимости платформы, потому что искажение имени работает очень по-другому даже в различных версиях тех же компиляторов (в моем случае, GCC).

1
ответ дан 4 December 2019 в 13:51
поделиться

У Вас будет мир соединения проблемы, потому что скорректированные имена будут отличаться. И да, я вижу, что Вы знали, что, но это походит, это будет проблема все вокруг.

0
ответ дан 4 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: