我想在编译时隐藏字符串。我知道它可以在其他预处理器中完成,但我还没有找到一种方法来处理预处理器。C预处理器是否能够通过char处理字符串char?
1
A
回答
2
好了,你可以做到这一点,但它的丑陋。
#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”。现在,显然,与0x20异或不是一个很好的函数来隐藏你的字符串。当然,你必须为每个字符串长度定义一个宏。
很明显,这不是最好的解决方案。 C++模板元编程会更好。您还可以将所有字符串写入单独的机器可读文件中,并编写一个单独的程序来解析该字符串,以任何您认为合适的方式遮蔽字符串,并将其全部输出到.h/.c中。这两者都是比这更好的解决方案。
0
不,C预处理器无法按照您的建议索引字符串。
出于好奇,你有什么其他的预处理器可以做到这一点?
1
不,C预处理器无法逐字处理字符串。
您是否有任何标识符或字符串?对于带有固定映射的标识符,您可以做很多事情(也就是说,如果您知道name1出现,您可以提供到xq23的固定映射),但不能通过算法查找标识符,然后为它们创建映射。
0
不,我想不出用预处理器做什么。
此相关的问题可以帮助你,但:How to hide a string in binary code?
相关问题
- 1. Python没有按预期处理char字符串
- 2. 在处理char数组时处理NULL char的正确方法
- 3. 检查预处理宏是否是C字符串?
- 4. 字符串预处理
- 5. Verilog预处理器字符串连接
- 6. C++通过char将Char文件读入字符串;崩溃
- 7. 处理C中char *的列表?
- 8. 字符串char - C++
- 9. C预处理产生通过串联和字串
- 10. C++预处理器
- 11. 为什么char *在C中被当作char **处理?
- 12. 通过PortletPreferences(Liferay6.2)处理字符串[]
- 13. C字符串处理
- 14. C预处理器:用前导零对字符串int进行处理?
- 15. 是否有比Pro * C/C++更智能的Oracle预处理器?
- 16. 解析Ascii字符的传入TCP流,处理退格符char
- 17. 字符串处理
- 18. 字符串处理
- 19. 是不是字符串[Char]?
- 20. 预处理字符串列表
- 21. C预处理器,从字符串中去除条状图
- 22. C预处理器:字符串化不起作用
- 23. C预处理器,将一个宏的结果字符串化
- 24. C预处理器如何将函数宏视为字符串
- 25. 将字符串转换为令牌的C预处理器宏?
- 26. C预处理器:字符串宏和标识宏
- 27. CMake:如何通过预处理器宏
- 28. C++:从字符串为char *
- 29. C++,char *字符串修改
- 30. C++ - 的char *与字符串*
不在gcc上编译,试过各种-std =选项。 – 2011-12-23 18:30:37