举例说明:

此十六进制保存的文件为此源代码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. vue.js语法

    Vue.js是当下很火的一个JavaScript MVVM(Model-View-ViewModel)库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更 ...

  2. R的数据图形

    R支持4种图形类型: base graphics, grid graphics, lattice graphics,  ggplot2. Base graphics是R的默认图形系统. 一.  基本图 ...

  3. Scikit-Learn框架

    1. Dataset scikit-learn提供了一些标准数据集(datasets),比如用于分类学习的iris 和 digits 数据集,还有用于归约的boston house prices 数据 ...

  4. MySQL 内建函数

    日期相关 mysql> select curdate(),curtime(),now(),unix_timestamp(),week('2017-07-24'),year('2017-07-24 ...

  5. Springboot系列文章

    一.springboot简介1.前世今生 在boot没有出现之前,基于spring的开发,常常需要配置大量的xml文件.工程狮们苦不堪言,渐渐厌倦了配置文件的复制黏贴.spring家族因为这件事,也经 ...

  6. 用Html模仿百度一下你就知道

    用Html模仿百度一下你就知道.... ------------------------------- <!doctype html> <html lang="en&quo ...

  7. python基础教程(四)

    列表 本节继续讨论列表不同元组和字符串的地方:列表是可变的(mutable)----可以改变列表的内容,并且列表有很多有用的.专门的方法. List函数可以将一个字符串拆分成列表. >>& ...

  8. 【Ztree】前台展示多级菜单,后台配置方法

    第一步.前台HTML页面. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" ...

  9. Jmeter+Jenkins的聚合报告中添加QPS栏目显示

    1.进入jmeter/extras目录,修改 jmeter-results-detail-report_21.xsl   2.打开文件修改 如上所示,在文件中添加6个地方关于QPS的显示即可, 然后替 ...

  10. ubuntu 14.04中安装phpmyadmin即mysql图形管理界面

    由于学习的需要,我将网站开发环境从windows转移到了ubuntu,ubuntu下之前并没有发现什么难的地方,只要百度一般都有解决方案.但是总所周知ubuntu是一系列开源软件的集合,由于版本的问题 ...