在linux下通过hexdump生成一个十六进制的文本保存文件,解析此文件转变成正常源代码文件。
举例说明:
此十六进制保存的文件为此源代码hexdump生成的:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
dtob(int a);
int main(int argc,char **argv)
{
FILE *fp;
int a;
if((fp=fopen("1.c","r"))==NULL)
{
printf("open error\n");
}
while((a=getc(fp))!=-)
{
dtob(a);
}
printf("\n");
return ;
}
dtob(int a)
{
int i=;
int *p;
p=(int *)malloc(*sizeof(int));
while(i<)
{
if(a/ || a==)
{
*(p+i)=a%;
}
else
*(p+i)=;
a=a/;
i++;
}
for(i=;i>=;i--)
printf("%d",*(p+i));
}
此源代码的hexdump之后的文件为:
636e 756c 733c 6f69 682e
0a3e 636e 756c 733c 6e69
2e67 3e68 230a 6e69 6c63 3c65
6c64 682e 0a3e 636e 756c
6d3c 6c61 6f6c 2e63 3e68 640a 6f74
6e69 0a3b 6e69 616d 6e69
746e 2c63 2a20
612a 7b0a 090a 454c 2a20
0a3b 746e 0a3b
3d70 6f66 286e 632e 2c22
00000a0 3d29 4e3d 4c55 294c 090a 0a7b
00000b0 6e69 706f 6e65
00000c0 726f 6e5c 0a3b 7d09 090a
00000d0 6c69 673d
00000e0 3d21 312d 0a29 7b09 090a 6f74
00000f0 0a3b 7d09 090a 6e69
6e5c 0a3b 206e 3b30
7d0a 640a 6f74 6e69 7b0a
090a 6e69 3d69 3b30 090a 6e69
702a 0a3b 283d 6e69 292a 616d
6c6c 636f 732a 7a69 6f65 6e69
3b29 090a 6c69 3c69
090a 0a7b 322f 7c20 207c
3d61 313d 0a29 0a7b 2a09
692b 3d29 3b32 090a 7d09 090a
736c 0a65 2a09 692b 3d29 3b30
00001a0 090a 613d 322f 0a3b 2b69 3b2b
00001b0 090a 0a7d 726f 373d 693b 3d3e
00001c0 3b30 2d69 292d 090a 746e
00001d0 2a2c 692b 0a3b 0a7d
00001e0
如何把此十六进制代码重新解析返回成源代码形成:
编码如#include<stdio.h>
#include<string.h>
#include<stdlib.h>
disp(char *p);
int main(int argc,char **argv)
{
FILE *fp;
char buf[],*p;
p=(char *)malloc(sizeof(buf));
if((fp=fopen("hex","r"))==NULL)
{
printf("open error!\n");
exit();
}
memset(buf,,sizeof(buf));
while(fgets(buf,sizeof(buf),fp)!=NULL)
{
if((p=strstr(buf," "))!=NULL)
p++;
disp(p);
memset(buf,,sizeof(buf));
}
return ;
}
disp(char *p)
{
char a[],b[];
memset(a,,sizeof(a));
memset(b,,sizeof(b));
while(p!=NULL)
{
sscanf(p,"%2x%2x",b,a);
printf("%s%s",a,b);
if((p=strstr(p," "))!=NULL)
{
p++;
if(strncmp(p," ",1)==0)
exit(0);
}
}
}
在IBM的AIX下:
() 3c 3f 6d 6c 6f 6e 3d <?xml version="
() 2e 6e 6f 6e 3d ." encoding="G
() 4b 3f 3e 0a 3c 4d 3e 0a 3c BK" ?>*<Msg>**<H
() 3e 0a 3c 3e 2e 3c ead>***<Ver>1.0<
() 2f 3e 0a 3c 6e 6d /Ver>***<SndTime
() 3e 3c 2f 6e 6d 3e 0a 3c ></SndTime>***<
() 4d 4e 6f 3e 4c 3c 2f 4d MsgNo>L00101</Ms
() 4e 6f 3e 0a 3c 4e 6f 6d 6e 6b gNo>***<NomBankI
() 3e 3c 2f 4e 6f 6d 6e 6b D></NomBankI
() 3e 0a 3c 4d 3e D>***<MsgID>DHCC
(000a0) 3c 2f </
(000b0) 4d 3e 0a 3c 4f 4d MsgID>***<OrigMs
(000c0) 3e 3c 2f 4f 4d 3e gID></OrigMsgID>
(000d0) 0a 3c 2f 3e 0a 3c 6f **</Head>**<Body
(000e0) 3e 0a 3c 6e 6f 3e 0a >***<BaseInfo>**
(000f0) 3c 6e 3e 3c 2f **<TxnID></Tx
() 6e 3e 0a 3c 6e nID>****<RefTxnI
() 3e 3c 2f 6e 3e 0a D></RefTxnID>**
() 3c 6e 6e 6b 3e **<InterBankID>
解析代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
disp(char *p);
int main(int argc,char **argv)
{
FILE *fp;
char buf[],*p;
p=(char *)malloc(sizeof(buf));
if((fp=fopen("hex","r"))==NULL)
{
printf("open error!\n");
exit();
}
memset(buf,,sizeof(buf));
while(fgets(buf,sizeof(buf),fp)!=NULL)
{
if((p=strstr(buf," "))!=NULL)
{
p++;
}
disp(p);
memset(buf,,sizeof(buf));
}
return ;
}
disp(char *p)
{
char b[];
memset(b,,sizeof(b));
while(p!=NULL)
{ sscanf(p,"%hhx",b);//hhx表示一个8位的十六进制数
printf("%s",b);
if((p=strstr(p," "))!=NULL)
{
p++;
if(strncmp(p," ",)==)
{
p++;
if(strncmp(p," ",)==)
exit();
}
}
}
}
在linux下通过hexdump生成一个十六进制的文本保存文件,解析此文件转变成正常源代码文件。的更多相关文章
- Linux下静态库生成和使用
Linux下静态库生成和使用 一.静态库概念 1.库是预编译的目标文件(object files)的集合,它们可以被链接进程序.静态库以后缀为”.a”的特殊的存档(archive file)存储. ...
- Linux下动态库生成和使用
Linux下动态库生成和使用 一.动态库的基本概念 1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中 ...
- 在Linux下,如何分析一个程序达到性能瓶颈的原因
0.在Linux下,如何分析一个程序达到性能瓶颈的原因,请分别从CPU.内存.IO.网络的角度判断是谁导致的瓶颈?注意现在的机器CPU是多核 1.用sar -n DEV 1 10 2.用iotop命令 ...
- Linux系统下LNMP一键搭建Linux、PHP、MySQL环境(适合新手搭建linux下的web生成环境)
一. 首先要解释一下,什么是LNMP,LNMP起源于LAMP,LAMP是Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的缩写,这里将Web服务端的Apache替换 ...
- ESP8266交叉编译器xtensa-lx106-elf 在Linux下编译与生成
原作者:杭州_燕十三 来源:CSDN 原文:https://blog.csdn.net/flyingcys/article/details/71357261 版权声明:本文为博主原创文章,转载请附上博 ...
- Linux下使用openssl生成证书
利用OpenSSL生成库和命令程序,在生成的命令程序中包括对加/解密算法的测试,openssl程序,ca程序.利用openssl,ca可生成用于C/S模式的证书文件以及CA文件. 参考:http:// ...
- Linux下使用vim命令编辑与修改文本内容
输入 vim --help VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jul 26 2017 20:13:43) 用法: vim [参数] [文件 .. ...
- LINUX下PHP网页生成快照(截屏)(xvfb and wkhtmltoimage)
经测试,可以使用 利用php截屏或实现网页快照我们需要用一个工具:xvfb and wkhtmltoimagek哦,这个工具目前只能在linux系统中使用,下面有兴趣的朋友可进入参考. 在做旅游攻略时 ...
- linux下使用openssl生成https的crt和key证书
x509证书一般会用到三类文,key,csr,crt Key 是私用密钥openssl格,通常是rsa算法. Csr 是证书请求文件,用于申请证书.在制作csr文件的时,必须使用自己的私钥来签署申,还 ...
随机推荐
- 我读《通过Go来处理每分钟达百万的数据请求》
我读<通过Go来处理每分钟达百万的数据请求> 原文 原文作者为Malwarebytes公司的首席架构师Marcio Castilho http://marcio.io/2015/07/ha ...
- node.js之模块
node.js之模块 1.自定义模块的设置 加载自定义模块利用require: eg: require('./custom_module.js') 2.从模块外部访问模块内的成员 2.1使用expor ...
- shell解析命令行的过程以及eval命令
本文说明的是一条linux命令在执行时大致要经过哪些过程?以及这些过程的大致顺序. 1.1 shell解析命令行 shell读取和执行命令时的大致操作过程如下图: 以执行以下命令为例: echo -e ...
- 关于Alipay支付宝接口(Java版)
支付宝开发文档:https://b.alipay.com/order/techService.htm 1.alipay 双功能支付简介 2.alipay 提交支付订单 3.alipay 整合双功能支付 ...
- 【Spring】XML配置整合Mybatis
注意:项目开发使用了mybatis的mapper代理! 首先是mybatis自己的配置文件,被spring整合之后,只有typeAliases存在了,其他都整合在了spring-mybatis.xml ...
- BotVS开发基础—2.4 获取订单、取消订单、获取未完成订单
代码 RetryDelay = 1500; def CancelPendingOrders(exch, orderType): # 取消所有未完成的挂单, 参数1 交易所 参数2 类型 global ...
- 安全终端模拟工具Xshell 5使用密钥认证登录配置详细教程
▲版权声明:本文为博主原创文章,未经博主允许不得转载. Xshell支持SSH1 / SSH2协议,密码和DSA / RSA公钥用户认证方式等各种安全功能,并对各种加密算法进行加密.使用内置的Xshe ...
- jQuery遍历-同胞
同胞拥有相同的父元素. 通过 jQuery,您能够在 DOM 树中遍历元素的同胞元素. 在 DOM 树中水平遍历 有许多有用的方法让我们在 DOM 树进行水平遍历: siblings() next() ...
- jmeter 实现登录一次,多次操作登录后的某一个功能
- 推荐一款接口文档在线管理系统-MinDoc
项目简介 MinDoc 是一款针对IT团队开发的简单好用的文档管理系统. MinDoc 的前身是 SmartWiki 文档系统.SmartWiki 是基于 PHP 框架 laravel 开发的一款文档 ...