在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文件的时,必须使用自己的私钥来签署申,还 ...
随机推荐
- .net项目架构改造之搭建基于java环境配置一览【上】
最近公司做了一个项目,需要嵌套在千牛的客户端上,项目代码必须上阿里的聚石塔,全程采用基于docker的自动化部署,我们的项目是基于.net架构.很遗憾 的是基于windows的docker上部署在访问 ...
- 实操代码研究各种Java技术-java.toutiao.im
whatsmars https://github.com/javahongxi/whatsmars whatsmars-earth-web springmvc+velocitywhatsmars-ea ...
- 鸟瞰spring
一.spring框架概述: Spring框架主要提供了Ioc容器.AOP.数据访问.Web开发.消息.测试等相关技术的支持. 1.Spring的模块 1)核心容器 Spring-Core:核心工具类, ...
- Struts2文件下载中文名乱码
Struts2中提供了快捷的下载方式,通过配置struts.xml文件即可实现文件的下载,但是功能实现后下载文件的文件名却出现乱码,或者直接来个***.action,让人很是无语,但很显然,这是中文乱 ...
- JS中的循环结构
[循环结构的执行步骤]1.声明循环变量:2.判断循环条件3.执行循环体操作4.更新循环变量然后循环执行2-4,直到条件不成立时,跳出循环.while循环()中的表达式,运算结果可以是各种类型,但是最终 ...
- python专题-Mysql数据库(python3._+ PyMysql)
之前写过一篇 Python使用MySQL数据库的博客,主要使用的是Python2和MySQLdb驱动. python使用mysql数据库 Python2 ---> Python3 MySQLdb ...
- js实现非模态窗口增加数据后刷新父窗口数据
父窗口是由两个部分组成,一个html的table,一部分是extjs的gird. 点击grid面板[增加]按钮将会弹出非模态窗口进行新数据的编辑页面 下面是按钮的触发函数代码: var a = win ...
- 项目管理svn
https://nchc.dl.sourceforge.net/project/tortoisesvn/1.9.6/Application/TortoiseSVN-1.9.6.27867-x64-sv ...
- 栈的实现Java
package practice; import java.util.Iterator; //栈 public class MyStack<T> implements Iterable&l ...
- 面向对象五大原则(SRP、OCP、LSP、DIP、ISP)
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt173 OO的五大原则是指 1. SRP(Single Responsibil ...