我想在編譯時隱藏字符串。我知道它可以在其他預處理器中完成,但我還沒有找到一種方法來處理預處理器。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