Шифрование на макросах?

Тема в разделе "LANGS.C", создана пользователем Rel, 4 май 2010.

  1. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Не проще писать _MY_C_STRING_CIPHER_ ("very_long_string") и искать токен _MY_C_STRING_CIPHER_ регуляркой?
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    J0E
    во-первых это неудобно
    во-вторых всеравно надо разруливать комментарии
    Код (Text):
    1. /*
    2. .................
    3. ................ _MY_C_STRING_CIPHER_ ("very_long_string") ..............
    4. ...............
    5. */
     
  3. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    но вместо парсера можно регулярками обрабатывать строки, и искать открытие\закрытие многострочного комментария
     
  4. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Может просто ненадо называть функцию "_MY_C_STRING_CIPHER_" если она есть в комментариях или просто не писать эту последовательность символов в комментариях)
    А вообще проблема то решится введением отдельного *.h файла для строк с жёстким форматом(никаких комментариев, ничего постороннего, в каждой строке файла ровно одно определение). Это раз и навсегда решит проблему парсера всего кода для поиска строк )
     
  5. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Удобнее искать токен, чем парсить грамматику С++. Мыслим шире: L"very_long_string" X"very_long_string".
    Зачем, они не влияют на генерируемый код )
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    что-то забыл про эту тему... как вам такой вариант:
    Код (Text):
    1. #define CRYPT8(str) { CRYPT8_(str "\0\0\0\0\0\0\0\0") }
    2. #define CRYPT8_(str) (str)[0] + 1, (str)[1] + 2, (str)[2] + 3, (str)[3] + 4, (str)[4] + 5, (str)[5] + 6, (str)[6] + 7, (str)[7] + 8, '\0'
    3.  
    4. // Вызов
    5. const char str[] = CRYPT8("ntdll");
    в результате в бинарнике получаем "закриптованную" строку... в принципе довольно сносно, но есть одно но... можно ли как-нибудь определить длину строки и обрывать определение массива?

    есть ещё такой вариант:
    Код (Text):
    1. #define _TOSTR(x) #x
    2. #define _TOARR(a, b, c, d, e) _TOSTR(a ## b ## c ## d ## e)
    3. #define CRYPT5(a, b, c, d, e) _TOARR(_C##a,_C##b,_C##c,_C##d,_C##e,_C##f)
    4.  
    5. // Вызов
    6. const char str[] = CRYPT5(n, t, d, l, l);
    (_Cx - таблица замены символов, где x - заменяемый символ)
    но тоже не совсем хороший вариант... не подскажите, можно ли как то здесь _VA_ARGS_ использовать для определения числа параметров?
     
  7. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Мне думается, что всетаки лучше писать свой язык или надстройку к языку.
    Хотя та же надстройка сильно затруднит работу с ИДЕ и отладку. Впрочем макросы тоже.
     
  8. skomarov

    skomarov New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    389
    GoldFinch
    Написать свой язык - это отдельная большая задача.
    Проще, как говорит kaspersky, написать "тупую программу" для решения конкретной задачи.
    Хотя, если выбрать вариант создания языка и не жалеть на него сил и времени... но это уже из области мечтаний :)
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    да понятно... просто макросы канеш не предназначены для полноценной работы со строками))) видимо два варианта мной предложенный - максимум... к сожалению динамику определения длины строки прикрутить не возможно (если возможно, то скажите мне как)...

    вообще я начинаю подумывать о том, чтобы запихнуть строковые переменные в отдельную секцию и зашифровать эту секцию какой-нить тулзой... компилятор студии такого не умеет?))) как грамотно реализовать это, если делать самому?
     
  10. dendi

    dendi New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    233
    > вообще я начинаю подумывать о том, чтобы запихнуть строковые переменные в отдельную секцию и зашифровать эту секцию какой-нить тулзой...
    #pragma data_seg
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    не... как сделать отдельную секцию я знаю... я про шифрование этой секции имел ввиду... как лучше сделать...