在C语言中,在编译时是否有解析或修改字符串的方法?
我想在我的可执行二进制文件中隐藏字符串,因为它很容易破解。所以我想在编译时进行一些编码 我想在编译时更改字符串,例如,如果我有一个字符串在C语言中,在编译时是否有解析或修改字符串的方法?,c,arrays,string,gcc,compile-time,C,Arrays,String,Gcc,Compile Time,我想在我的可执行二进制文件中隐藏字符串,因为它很容易破解。所以我想在编译时进行一些编码 我想在编译时更改字符串,例如,如果我有一个字符串 a=“abc” 我想把一个 a=“bcd”(加上字符串数组的每个元素的'\1') 更重要的是,我想在编译期间将a更改为SHA256(a),这是否可能?您不能轻松做到这一点,但您可以编辑每个源文件来更改字符串的每次出现。如果使用emacs作为编辑器,您可以编写一些emacs Lisp代码来自动进行编辑 当然,您可以从其他内容生成C代码,例如使用其他预处理器(gp
a=“abc”
我想把一个
a=“bcd”
(加上字符串数组的每个元素的'\1'
)
更重要的是,我想在编译期间将
a
更改为SHA256(a)
,这是否可能?您不能轻松做到这一点,但您可以编辑每个源文件来更改字符串的每次出现。如果使用emacs
作为编辑器,您可以编写一些emacs Lisp代码来自动进行编辑
当然,您可以从其他内容生成C代码,例如使用其他预处理器(gpp
、m4
)和(例如awk
)脚本
您可以考虑采用这样的规则:每个字符串都用在唯一的宏中,例如:代码> MyStrangeEntrystring(“ABC”)< /代码>,而不是简单地<代码> ABC > <代码>;然后,您可能会使用一些预处理器技巧-合并、
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,可能是字符串化-。。。。(可能使用预处理器生成一些头文件等…)
一种可能是处理源代码两次。首先,通过一些gpp
或m4
预处理,将发生在第123行的我的奇怪字符串(“abc”)
转换为一个,在一些生成的头中定义我的字符串常量\u 123“cde”
。然后C编译器将使用普通的预处理技巧来实现这一点
您还可以通过特殊工具或脚本转换源代码的预处理形式
如果使用最近的(特别是)编译,您可以使用自定义编译器来执行此类操作。然后插入一些优化过程来进行转换。您可以将MY\u STRANGE\u字符串
定义为特定于应用程序的\uuuMy\u STRANGE\u字符串
,并将该附加内置项添加到GCC中,等等
请注意,您可能不想转换每个文本字符串(例如,您可能不想转换大多数fprintf
调用的文本控制字符串…,或者不想转换\uuuuuu文件\uuuuu
或\uu日期\uuuuu
的扩展,而只想转换其中的一些
我无能为力,因为你没有激发你的问题。你使用文本编辑器,将光标刚好放在最后一个
c
,点击backspace 3次,然后键入bcd
。说真的,“在编译时”是什么意思?你不能“在编译时”修改你的源代码。您可以使用任何工具生成源代码,将数据写入*.c文件?请编辑您的问题以进行改进。您的问题确实不清楚。请编辑你的问题以激发它,并给出一个真实的例子……我不知道是什么让你感到困惑,我只想编写一个编译函数,我可以用它转换字符串,而不会降低代码的可读性。你应该解释一下你问这个问题的原因。闻起来很像一只猫