Я хотел бы скрывать строки во время компиляции. Я знаю, что это можно сделать в других препроцессорах, но я не нашел способа сделать это с помощью препроцессора C.Может ли препроцессор C обрабатывать строковые символы char?
ответ
Ну, вы можете это сделать, но это некрасиво.
#define ENCODE_STRING_14(str) {\
str[0]^0x020,\
str[1]^0x020,\
str[2]^0x020,\
str[3]^0x020,\
str[4]^0x020,\
str[5]^0x020,\
str[6]^0x020,\
str[7]^0x020,\
str[8]^0x020,\
str[9]^0x020,\
str[10]^0x020,\
str[11]^0x020,\
str[12]^0x020,\
'\0'\
}
void Decode(char *str, int length)
{
for(int i = 0; i < length - 1; ++i)
{
str[i] ^= 0x20;
}
}
char hello[] = ENCODE_STRING_14("Hello, World!");
int main()
{
printf("%s\n", hello);
Decode(hello, 14);
printf("%s\n", hello);
return 0;
}
Составитель с оптимизацией в VS2005, строка хранится в исполняемом файле, как "HELLO \ x0C \ 0wORLD \ x01". Теперь, очевидно, xor с 0x20 не является хорошей функцией, чтобы скрыть вашу строку. И, конечно же, вам нужно будет #define макрос для каждой длины строки.
Очевидно, что это не лучшее решение. Метапрограммирование шаблонов C++ было бы лучше. Вы также можете написать все свои строки в отдельном машиночитаемом файле и написать отдельную программу, которая анализирует это, затеняет строки любым способом, который вы считаете нужным, и выводит все это на .h/.c. Оба эти решения лучше, чем это.
Нет, препроцессор C не имеет возможности индексировать строки, как вы предлагаете.
Из любопытства, какие другие препроцессоры вы использовали, которые могут это сделать?
Нет, предварительный процессор C не может обрабатывать символы строк по символам.
У вас есть идентификаторы или строки в виду, во всяком случае? Вы можете много сделать с идентификаторами с фиксированными сопоставлениями (то есть, если вы знаете имя1, вы можете указать фиксированное сопоставление для xq23), но вы не можете алгоритмически находить идентификаторы, а затем создавать для них сопоставление.
Нет, я не могу придумать никакого способа сделать это с препроцессором.
Этот связанный с этим вопрос может помочь вам, хотя: How to hide a string in binary code?
Не компилируется на gcc, пробовал различные параметры -std =. –