gpt4 book ai didi

C 在汇编程序中隐藏文件

转载 作者:行者123 更新时间:2023-11-30 19:08:56 24 4
gpt4 key购买 nike

我想在我的C代码中隐藏相同的文件(bash文件(文本)),然后在运行时调用它atm我做了这件事,但这不好,因为管理所有bash代码并不容易,我想做点什么像 bash1.sh、bash2.sh、bash3.sh ...在 C 代码内部然后始终在代码内部调用它而不使用 #define 因为这样可以更轻松地在源代码上编辑 .sh 文件。

#include <stdio.h>
#include <stdlib.h>

#define SHELLSCRIPT "\
#/bin/bash \n\
echo \"hello\" \n\
echo \"how are you\" \n\
echo \"today\" \n\
"
/*Also you can write using char array without using MACRO*/
/*You can do split it with many strings finally concatenate
and send to the system(concatenated_string); */

int main()
{
system(SHELLSCRIPT); //it will run the script inside the c code.
return 0;
}

最佳答案

InternetAussie 已经很好地回答了 C 字符串文字部分。然而,它看起来并不比宏定义更好,不是吗?尝试将 shell 代码作为数组并连接字符串只会让您不必添加换行符,所以...

如果您希望能够尽可能轻松地修改 shell 脚本并且如果您愿意首先投入一些时间,那么请编写一个 shell 脚本转换器。

然后,您可以像平常一样编写 shell 脚本(可能是您能找到的最简单的方法),并让 IDE 在每次构建时使用翻译器从它们生成 C 代码(如果 shell 脚本发生更改)。

根据您的 IDE,您可能会安装预构建任务,包括一些 makefile 或提供的任何内容。

生成的 C 代码将包含 shell 脚本作为定义(然后可以包含在头文件中)或全局全局字符串常量,就像已经提到的答案(在源文件中)一样。

示例解析器可能如下所示(不完整,您还需要动手操作;因为这是一个 C 问题,我提供了 C 代码,但您也可以使用任何合适的其他代码,例如 perl):

#include <stdio.h>

char const* getCFileName(char const*)
{
return 0; // replace .sh with .c?
}
char const* getVariableName(char const*)
{
return 0; // find appropriate global variable name!
}

int main(int argc, char* argv[])
{
if (argc < 2)
return -1;
FILE* in = fopen(argv[1], "r");
if (!in)
return -1;
FILE* out = fopen(getCFileName(argv[1]), "w");
if (!out)
{
fclose(in);
return -1;
}
// filename possibly given in argv or derived from either argv1/2
fprintf(out, "char const* const %s = \n", getVariableName(argv[1]));
char buffer[1024];
while (fgets(buffer, sizeof(buffer), in))
{
// escape special characters in buffer: '\', '"', ...
// replace the terminating newline character with "\n", tabs with "\t", ...
fprintf(out, " \"%s\"\n", buffer);
}
fprintf(out, "%s", " \"\";\n");
// (included empty string for the case the file is empty - if so,
// generated C code still is valid...)

fclose(in);
fclose(out);

return 0;
}

关于C 在汇编程序中隐藏文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44021472/

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