gpt4 book ai didi

c - 在 C 编译期间是否有解析或修改字符串的方法?

转载 作者:行者123 更新时间:2023-11-30 20:25:00 25 4
gpt4 key购买 nike

我想在可执行二进制文件中隐藏字符串,因为它很容易被破解。所以我想在编译时进行一些编码

我想在编译时更改字符串,例如,如果我有一个字符串

a = "abc"

我想将 a 更改为

a = "bcd"(在字符串数组的每个元素上加上 '\1')。

更重要的是,我想在编译时将a更改为SHA256(a),可以吗?

最佳答案

您无法轻松做到这一点,但您可以编辑每个源文件来更改字符串的每次出现。如果使用 emacs 作为编辑器,您可以编写一些 Emacs Lisp 代码来自动进行编辑。

当然,您可以从其他内容生成 C 代码,例如使用一些其他预处理器(gppm4)和/或某些(例如awk)脚本。

您可能会考虑采用这样的约定:每个此类字符串都在唯一的宏中使用,例如MY_STRANGE_STRING("abc") 而不是简单的 "abc";那么你可以使用一些预处理器 macro技巧-连接,__LINE__,也许是字符串化- ....(也许使用 gpp 预处理器生成一些 header 等...)

一种可能是处理您的源两次。首先通过一些 gppm4 预处理,将第 123 行出现的 MY_STRANGE_STRING("abc") 转换为 #define MY_STRING_CONSTANT_123 "cde" 在一些生成的 header 中。然后 C 编译器将使用普通的预处理技巧来实现这一点。

您还可以通过临时工具或脚本转换源代码的预处理形式。

如果使用最近的 GCC 进行编译(具体来说)你可以使用 MELT定制你的编译器来执行这些技巧。然后,您将插入一些优化过程来进行转换。您可以将 MY_STRANGE_STRING 定义为您的应用程序特定的 __my_strange_string_builtin 并将该附加内置函数添加到 GCC 等中...

请注意,您可能不想转换每个文字字符串(例如,您可能不想转换大多数 fprintf 调用的文字控制字符串...,或 __FILE____DATE__ 发生在某些系统宏中,例如 assert),但仅是其中的一些。

我无法提供更多帮助,因为你没有提出你的问题。

关于c - 在 C 编译期间是否有解析或修改字符串的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31307398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com