-
-
[求助]PE文件用二进制方式打开问题
-
发表于: 2009-5-12 08:59 3280
-
各位老大,小弟遇到一个问题,在DOS窗口下已经实现,
但在输出到文本文件和输出到一个EDIT控件时不知道从何下手了,请不吝赐教,
函数如下(代码写的不规范,请将就着看)
void vvv(unsigned char *aa,int i)//*aa 存放的是读取好的可执行文件的16个字符,i 表示第 i 个*aa
{
printf("%08lx: ",i*16);//显示00000000:-00000010:
int j;
char k='.';//遇到小于33和大于126的字符用‘.’代替
for(j=0;j<N;j++)
{
if((aa[j]<33)||(aa[j]>255)) aa[j]='\0';
printf("%02lx ",aa[j]);//显示二进制代码
}
printf(" ");
for(j=0;j<N;j++)
{
if((aa[j]<33)||(aa[j]>126)) //pbuf[i][j]='.';
printf("%c",k);//显示‘.’字符,16进制时2EH
else
printf("%c ",aa[j]););//显示字符
}
printf("\n");
}
以上函数可以在DOS窗口实现如下输出:
00000000: 4d 5a 90 00 00 00 00 00 00 00 00 00 ff ff 00 00 M Z ..............
00000010: b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ........@ .......
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 b8 00 00 00 ................
00000040: 00 00 ba 00 00 b4 00 cd 21 b8 00 4c cd 21 54 68 ........! ..L .! T h
00000050: 69 73 00 70 72 6f 67 72 61 6d 00 63 61 6e 6e 6f i s .p r o g r a m .c a n n o
00000060: 74 00 62 65 00 72 75 6e 00 69 6e 00 44 4f 53 00 t .b e .r u n .i n .D O S .
00000070: 6d 6f 64 65 2e 00 00 00 24 00 00 00 00 00 00 00 m o d e . ...$ .......
00000080: 2a e9 91 38 6e 88 ff 6b 6e 88 ff 6b 6e 88 ff 6b * ..8 n ..k n ..k n ..k
00000090: e0 97 ec 6b 78 88 ff 6b 92 a8 ed 6b 6f 88 ff 6b ...k x ..k ...k o ..k
000000a0: a9 8e f9 6b 6f 88 ff 6b 52 69 63 68 6e 88 ff 6b ...k o ..k R i c h n ..k
000000b0: 00 00 00 00 00 00 00 00 50 45 00 00 4c 00 00 00 ........P E ..L ...
请问:
1、怎样编程才能实现按照以上格式输出到TXT文本,或者输出到一个EDIT控件中
2、在字符列如何显示ASCII码以外的字符(例如:二进制 D6 D0 B9 FA 则后面字符显示 中国)
请给出代码,谢谢谢谢
但在输出到文本文件和输出到一个EDIT控件时不知道从何下手了,请不吝赐教,
函数如下(代码写的不规范,请将就着看)
void vvv(unsigned char *aa,int i)//*aa 存放的是读取好的可执行文件的16个字符,i 表示第 i 个*aa
{
printf("%08lx: ",i*16);//显示00000000:-00000010:
int j;
char k='.';//遇到小于33和大于126的字符用‘.’代替
for(j=0;j<N;j++)
{
if((aa[j]<33)||(aa[j]>255)) aa[j]='\0';
printf("%02lx ",aa[j]);//显示二进制代码
}
printf(" ");
for(j=0;j<N;j++)
{
if((aa[j]<33)||(aa[j]>126)) //pbuf[i][j]='.';
printf("%c",k);//显示‘.’字符,16进制时2EH
else
printf("%c ",aa[j]););//显示字符
}
printf("\n");
}
以上函数可以在DOS窗口实现如下输出:
00000000: 4d 5a 90 00 00 00 00 00 00 00 00 00 ff ff 00 00 M Z ..............
00000010: b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ........@ .......
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 b8 00 00 00 ................
00000040: 00 00 ba 00 00 b4 00 cd 21 b8 00 4c cd 21 54 68 ........! ..L .! T h
00000050: 69 73 00 70 72 6f 67 72 61 6d 00 63 61 6e 6e 6f i s .p r o g r a m .c a n n o
00000060: 74 00 62 65 00 72 75 6e 00 69 6e 00 44 4f 53 00 t .b e .r u n .i n .D O S .
00000070: 6d 6f 64 65 2e 00 00 00 24 00 00 00 00 00 00 00 m o d e . ...$ .......
00000080: 2a e9 91 38 6e 88 ff 6b 6e 88 ff 6b 6e 88 ff 6b * ..8 n ..k n ..k n ..k
00000090: e0 97 ec 6b 78 88 ff 6b 92 a8 ed 6b 6f 88 ff 6b ...k x ..k ...k o ..k
000000a0: a9 8e f9 6b 6f 88 ff 6b 52 69 63 68 6e 88 ff 6b ...k o ..k R i c h n ..k
000000b0: 00 00 00 00 00 00 00 00 50 45 00 00 4c 00 00 00 ........P E ..L ...
请问:
1、怎样编程才能实现按照以上格式输出到TXT文本,或者输出到一个EDIT控件中
2、在字符列如何显示ASCII码以外的字符(例如:二进制 D6 D0 B9 FA 则后面字符显示 中国)
请给出代码,谢谢谢谢
赞赏
看原图
赞赏
雪币:
留言: