自己写的二进制查看器无法正常使用
本帖最后由 1314xxxxxx 于 2017-8-3 09:18 编辑代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE* fp = fopen("第29课笔记.exe","rb");
unsigned int address = 0x00000000;
int i;
fseek(fp,0L,0);
long int b = ftell(fp);
if(fgetc(fp) != EOF)
{
fseek(fp,0L,0);
do
{
fseek(fp,0L,b-1);
printf("%08x ",address);
for(i=0;i<16;i++)
{
int c = fgetc(fp);
printf("%02x ",c);
}
printf("\n");
address += 0x10;
b = ftell(fp);
}while(fgetc(fp) != EOF);
}
getchar();
return 0;
}
这样算正常吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE* fp = fopen("1.exe","rb");
unsigned int address = 0x00000000;
int i;
long int b = ftell(fp);
fseek(fp,0L,0);
if(fgetc(fp) != EOF)
{
fseek(fp,0L,0);
do
{
fseek(fp,0L,b-1);
printf("%08x ",address);
for(i=0;i<16;i++)
{
int c = fgetc(fp);
printf("%02x ",c);
}
printf("\n");
address += 0x10;
b = ftell(fp);
}while(fgetc(fp) != EOF);
}
getchar();
return 0;
}
ba21 发表于 2017-8-2 18:11
这样算正常吗?
第二行里本来应该有个00B8,但是没有输出出来。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE* fp = fopen("1.exe","rb");
unsigned int address = 0x00000000;
int c=0;
int i;
fseek(fp,0L,0);
while(1)
{
printf("%08x ",address);
for(i=0;i<16;i++)
{
if((c = fgetc(fp)) == EOF)
break;
printf("%02x ",c);
}
if (c == EOF)
break;
printf("\n");
address += 0x10;
}
fclose(fp);
getchar();
return 0;
}
ba21 发表于 2017-8-3 10:13
我是说,PE文件的DOS头的e_sp标记本应该是00B8,但是我的程序打印出来后是0000。。。
科普:PE文件指的是windows下的可执行文件,这些可执行文件都遵守PE结构。 我是说,PE文件的DOS头的e_sp标记本应该是00B8,但是我的程序打印出来后是0000。。。
科普:PE文件指的是windows下的可执行文件,这些可执行文件都遵守PE结构。 1314xxxxxx 发表于 2017-8-3 10:32
我是说,PE文件的DOS头的e_sp标记本应该是00B8,但是我的程序打印出来后是0000。。。
科普:PE文件指的 ...
也麻烦你仔细看一下咯。要不也对比一下行吗?
DOS窗口只能显示这么多。我截图的是最后几行的2进制文件对比图。前面的你要想看,你保存成文件就可以看得到了啊。
上面的UEDIT中的0002e000h到最后,和程序中的0002e000到最后,足以表明所读取的内容完全一样了。
ba21 发表于 2017-8-3 10:49
也麻烦你仔细看一下咯。要不也对比一下行吗?
DOS窗口只能显示这么多。我截图的是最后几行的2进制文件对 ...
???为什么我的就不可以???{:10_266:} 1314xxxxxx 发表于 2017-8-3 11:17
???为什么我的就不可以???
让它显示到0x200就break啊。
你的代码本来就有问题。
页:
[1]