Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中,在编译时是否有解析或修改字符串的方法?_C_Arrays_String_Gcc_Compile Time - Fatal编程技术网

在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文件?请编辑您的问题以进行改进。您的问题确实不清楚。请编辑你的问题以激发它,并给出一个真实的例子……我不知道是什么让你感到困惑,我只想编写一个编译函数,我可以用它转换字符串,而不会降低代码的可读性。你应该解释一下你问这个问题的原因。闻起来很像一只猫