举例说明:

此十六进制保存的文件为此源代码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生成一个十六进制的文本保存文件,解析此文件转变成正常源代码文件。的更多相关文章

  1. Linux下静态库生成和使用

    Linux下静态库生成和使用 一.静态库概念 1.库是预编译的目标文件(object  files)的集合,它们可以被链接进程序.静态库以后缀为”.a”的特殊的存档(archive file)存储. ...

  2. Linux下动态库生成和使用

    Linux下动态库生成和使用 一.动态库的基本概念 1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中 ...

  3. 在Linux下,如何分析一个程序达到性能瓶颈的原因

    0.在Linux下,如何分析一个程序达到性能瓶颈的原因,请分别从CPU.内存.IO.网络的角度判断是谁导致的瓶颈?注意现在的机器CPU是多核 1.用sar -n DEV 1 10 2.用iotop命令 ...

  4. Linux系统下LNMP一键搭建Linux、PHP、MySQL环境(适合新手搭建linux下的web生成环境)

    一. 首先要解释一下,什么是LNMP,LNMP起源于LAMP,LAMP是Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的缩写,这里将Web服务端的Apache替换 ...

  5. ESP8266交叉编译器xtensa-lx106-elf 在Linux下编译与生成

    原作者:杭州_燕十三 来源:CSDN 原文:https://blog.csdn.net/flyingcys/article/details/71357261 版权声明:本文为博主原创文章,转载请附上博 ...

  6. Linux下使用openssl生成证书

    利用OpenSSL生成库和命令程序,在生成的命令程序中包括对加/解密算法的测试,openssl程序,ca程序.利用openssl,ca可生成用于C/S模式的证书文件以及CA文件. 参考:http:// ...

  7. Linux下使用vim命令编辑与修改文本内容

    输入 vim --help VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jul 26 2017 20:13:43) 用法: vim [参数] [文件 .. ...

  8. LINUX下PHP网页生成快照(截屏)(xvfb and wkhtmltoimage)

    经测试,可以使用 利用php截屏或实现网页快照我们需要用一个工具:xvfb and wkhtmltoimagek哦,这个工具目前只能在linux系统中使用,下面有兴趣的朋友可进入参考. 在做旅游攻略时 ...

  9. linux下使用openssl生成https的crt和key证书

    x509证书一般会用到三类文,key,csr,crt Key 是私用密钥openssl格,通常是rsa算法. Csr 是证书请求文件,用于申请证书.在制作csr文件的时,必须使用自己的私钥来签署申,还 ...

随机推荐

  1. Entity Framework入门教程:Oracle数据源访问

    由于System.Data.OracleClient.dll从.NET Framework4.0之后已被弃用,所以我们无法在.NET Framework高版本中使用.一番搜索之后,发现好多文章提到.N ...

  2. Struts2学习笔记(十一)——文件上传

    1.单文件上传 单文件上传步骤: 1)创建上传jsp页面 文件上传的表单提交方式必须是POST方式,编码类型:enctype="multipart/form-data",默认是 a ...

  3. Android 主题theme说明 摘记

    主题Theme就是用来设置界面UI风格,可以设置整个应用或者某个活动Activity的界面风格.在Android SDK中内置了下面的Theme,可以按标题栏Title Bar和状态栏Status B ...

  4. Redis集群之配置文件详解(待完善)

    运维Redis集群的核心任务就是配置文件Redis.conf 命令行将现使用的Redis配置参数导出到 redis.conf.bak文件 .conf > redis.conf.bak 查看文件内 ...

  5. linux虚拟机ip地址更改

    在虚拟机模式下 进入 cd /etc/sysconfig/network-scripts/ vim ifcfg-eth0 编辑 IPADDR=新的内网ip PREFIX  = 24 (对应255.25 ...

  6. 浏览网页之Web服务器

    Web服务器... ----------------------------- 网站服务器响应用户请求 ========================= 浏览网页的时候需要翻越一道墙 Firewal ...

  7. vue.js移动端app实战3:从一个购物车入门vuex

    什么是vuex? 官方的解释是:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 简单来说就 ...

  8. R语言安装加载包

    问题描述 在国内因为镜像的原因,直接使用:install.packages("plyr")往往无法成功添加安装包 解决办法 使用国内镜像进行安装,添加repo参数,参考如下: in ...

  9. MongoDB Native Node.js Driver

    写在前面 最近读<node.js学习指南>,对于mongodb没有介绍太多的工作原理,但是对于一个前端开发者,即使你还没有用过这种数据库也可以让你很好的理解和使用       一本非常好的 ...

  10. amoeba

    Amoeba 原理:amoeba相当于业务员,处理client的读写请求,并将读写请求分开处理.amoeba和master以及slave都有联系,如果是读的请求,amoeba就从slave读取信息反馈 ...