自制程序 dump & binwrite 验证 用UE来查看文件二进制内容,显示不完全正确 的问题
来源:互联网 发布:淘宝上买刀具犯法吗 编辑:程序博客网 时间:2024/06/01 13:22
有一个测试文件,内容如下:
EF BB BF EF BB BF 61 62 63 0D 0A E4 B8 AD E6 96 87 0D 0A
用UltraEdit程序打开,二进制显示时,只显示了一个UTF8-BOM,即首部只有一个 EF BB BF;而用Binary Viewer则显示2个,上图就是程序显示的截图(不能贴图片,改为文本)。
结论是:用UE来查看文件二进制内容,显示不完全正确。
以下是为了验证这个结论自制的两个小程序,功能刚好够用,可能有边界条件或安全问题没考虑到。
/*查看文件:十六进制*/#include <iostream>#include <cstdio> //printf#include <string>#include <fstream>using namespace std;int main(int argc, char** argv){if(argc > 1){ifstream file;file.open(argv[1],ios_base::binary);if(file.is_open()){int n = 0;unsigned char b;while(true){if(!file.read((char*)&b,1))break;if(n != 0)printf(" ");printf("%02X",b);n++;}}}return 0;}
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/*编辑文件:十六进制插入(ins)/替换(ovr)/删除(del)举例:源文件testfile十六进制内容为: 01 02 03 041.在文件头部插入3个字节的数据命令: binwrite testfile ins 0 11 22 33执行后,testfile内容修改为: 11 22 33 01 02 03 042.从文件头部偏移第3个字节开始覆写3个字节的数据命令: binwrite testfile ovr 3 11 22 33执行后,testfile内容修改为: 01 02 03 11 22 333.从文件头部偏移第1个字节开始删除2个字节的数据命令: binwrite testfile ovr 1 2执行后,testfile内容修改为: 01 04*/#include <iostream>#include <cstdio> //printf#include <cstdlib> //atoi#include <string>#include <fstream>using namespace std;enum {EXE_NAME,FILE_NAME,OPT_TYPE,OFFSET,DATA};enum {INS, OVR, DEL};typedef unsigned char byte;int main(int argc, char** argv){if(argc > DATA){ifstream file;file.open(argv[FILE_NAME],ios_base::binary);if(file.is_open()){file.seekg(0,ios_base::end);ifstream::pos_type size = file.tellg();byte* src = new byte[size];file.seekg(0,ios_base::beg);file.read((char*)src,size);file.close();ofstream ofile;ofile.open(argv[FILE_NAME],ios_base::binary);if(ofile.is_open()){int offset = atoi(argv[OFFSET]);ofile.write((char*)src,offset);int type = (string(argv[OPT_TYPE])==string("ins") ? INS : (string(argv[OPT_TYPE])==string("ovr") ? OVR :(string(argv[OPT_TYPE])==string("del") ? DEL : OVR)));if(type==INS || type==OVR){for(int i=0; i<argc-DATA; i++){byte b /*= atoi(argv[DATA+i])*/;int hex = 0;sscanf(argv[DATA+i],"%02X",&hex);b = (byte)hex;ofile.write((char*)&b,sizeof(b));}if(type==INS){ofile.write((char*)(src+offset),(int)size-offset);} else if(type==OVR){ofile.write((char*)(src+offset+(argc-DATA)),(int)size-offset-(argc-DATA));} }else if(type==DEL){int ndel = atoi(argv[DATA]);ofile.write((char*)(src+offset+ndel),(int)size-offset-ndel);} else {//do nothing.}}}}return 0;}
阅读全文
1 0
- 自制程序 dump & binwrite 验证 用UE来查看文件二进制内容,显示不完全正确 的问题
- od命令 查看文件的二进制内容
- 运行Dump文件,查看问题
- 如何使自制的listbox正确显示
- 用 GDB 调试程序并查看dump文件
- UE查看UTF-8的问题。
- 用UE查看中文的unicode编码
- dump日志文件的内容的研究
- 关于用HTML显示XML文件内容的问题
- CHM 文件无法显示内容的问题
- 如何验证dump文件的有效性
- 查看文件的内容
- JVM Dump 文件查看
- JVM Dump 文件查看
- 查看dump文件
- chrome显示ue-editor上传的视频问题
- 怎么正确显示textarea内容的换行
- 来格式化时间显示正确的时间
- 高性能JavaScript---加载和执行
- Spring笔记
- 练习一个简单的学生管理系统,不成熟,但是综合性很强
- win8.1 安装vs2017 需要更新KB2919355
- Spark学习笔记(4)Spark Streaming的Exactly-One的事务处理
- 自制程序 dump & binwrite 验证 用UE来查看文件二进制内容,显示不完全正确 的问题
- PAT 1046. Shortest Distance (20)
- 相关 maven 依赖(pom.xml 文件)
- 一个炫酷的opengles2.0翻页效果(安卓上opengles2.0f 翻书效果附源码)
- 游戏图像学基础 实践经验和优化(一)
- ZooKeeper选举机制
- 从产品的角度看中国有嘻哈的火爆
- Spark学习笔记(5)Spark Streaming流计算框架的运行源码
- POJ 1703 Find them, Catch them