将"xxd -i"编码的 C 源代码转换为 C 源代码的脚本/工具?
Script/Tool to convert C source code encoded by "xxd -i" to C source code?
是否有Linux/Unix工具可用于将C文件的十六进制转储数组(即xxd -i
的输出)转换为相应的源代码?
源
文件xyz.c
的xxd -i xyz.c
输出如下所示:
unsigned char xyz_c[] = {
0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x74,
0x64, 0x69, 0x6f, 0x2e, 0x68, 0x3e, 0x0a, 0x23, 0x69, 0x6e, 0x63, 0x6c,
0x75, 0x64, 0x65, 0x20, 0x3c, 0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x2e,
0x68, 0x3e, 0x0a, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20,
0x3c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x68, 0x3e, 0x0a, 0x0a,
…
0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x28, 0x73, 0x74, 0x61, 0x72, 0x74,
0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0x0a,
0x7d, 0x0a
};
unsigned int xyz_c_len = 4442;
假设存储在文件xyz.xxd
中。
在许多方面,重新生成原始代码的最简单方法是:
#include <stdio.h>
#include "xyz.xxd"
int main(void)
{
for (unsigned int i = 0; i < xyz_c_len; i++)
putchar(xyz_c[i]);
return 0;
}
通过更多的注意和一些宏,你可以把它做成一个通用的大纲程序——你需要提供文件名,以及要使用的两个 C 变量名称。
如果你不能(或不想)使用C编译器来完成这项工作,那么使用Python或Perl编写工具是一个简单的练习。 例如,不一定是最小的Perl脚本是:
#!/usr/bin/env perl -na
use strict;
use warnings;
# xxd -i drops the final comma - aargh (why?)!
foreach my $word (@F)
{
next unless $word =~ m/^0[Xx][[:xdigit:]]{2},?$/;
$word =~ s/,//;
printf "%c", hex($word);
}
它使用"自动拆分"选项(-a
)和"自动读取但不打印"选项(-n
),然后处理输入中看起来像十六进制字符的任何单词,例如0x0a(可选后跟逗号,因为xxd -i
有点不必要地省略了最后一个字节值后的逗号)并将其转换为相应的字节。 它是Perl,TMTOWTDI - 有不止一种方法可以做到这一点。
Boomerang Decompiler是免费的,可以在Linux上运行,并且可以在SourceForge上使用。
相关文章:
- 在Linux中哪里可以找到互斥、未来等的源代码
- 如何通过cpp程序运行shell脚本
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 在程序中编写脚本来编写和编译代码
- 难以理解某些人解决IOI问题的源代码
- 如何在c++中使用system()来运行包含空格的python脚本
- 使用g++编译hdf5源代码
- 在cygwin中运行c++脚本时发生错误
- 如何将真正的字符串从python c-api转换为python脚本
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何使用C++读取另一个程序中的源代码输出
- Poco FindMySql.cmake 无法找到 MySQL 源代码
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- C++出现控制台错误.我无法识别源代码的问题
- 将"xxd -i"编码的 C 源代码转换为 C 源代码的脚本/工具?
- 用于快速确定哪些源代码导致不必要的 .so 链接的脚本
- 脚本语言解释器源代码,可以学习
- 在c++中剥离编译源代码的任何脚本