1314xxxxxx 发表于 2017-8-2 14:30:18

自己写的二进制查看器无法正常使用

本帖最后由 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;
}

ba21 发表于 2017-8-2 18:11:59

这样算正常吗?

#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;
}

1314xxxxxx 发表于 2017-8-3 09:19:56

ba21 发表于 2017-8-2 18:11
这样算正常吗?

第二行里本来应该有个00B8,但是没有输出出来。

ba21 发表于 2017-8-3 10:13:56



#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;
}

1314xxxxxx 发表于 2017-8-3 10:32:49

ba21 发表于 2017-8-3 10:13


我是说,PE文件的DOS头的e_sp标记本应该是00B8,但是我的程序打印出来后是0000。。。
科普:PE文件指的是windows下的可执行文件,这些可执行文件都遵守PE结构。

1314xxxxxx 发表于 2017-8-3 10:34:20

我是说,PE文件的DOS头的e_sp标记本应该是00B8,但是我的程序打印出来后是0000。。。
科普:PE文件指的是windows下的可执行文件,这些可执行文件都遵守PE结构。

ba21 发表于 2017-8-3 10:49:17

1314xxxxxx 发表于 2017-8-3 10:32
我是说,PE文件的DOS头的e_sp标记本应该是00B8,但是我的程序打印出来后是0000。。。
科普:PE文件指的 ...

也麻烦你仔细看一下咯。要不也对比一下行吗?
DOS窗口只能显示这么多。我截图的是最后几行的2进制文件对比图。前面的你要想看,你保存成文件就可以看得到了啊。
上面的UEDIT中的0002e000h到最后,和程序中的0002e000到最后,足以表明所读取的内容完全一样了。


1314xxxxxx 发表于 2017-8-3 11:17:06

ba21 发表于 2017-8-3 10:49
也麻烦你仔细看一下咯。要不也对比一下行吗?
DOS窗口只能显示这么多。我截图的是最后几行的2进制文件对 ...

???为什么我的就不可以???{:10_266:}

ba21 发表于 2017-8-3 11:47:27

1314xxxxxx 发表于 2017-8-3 11:17
???为什么我的就不可以???

让它显示到0x200就break啊。
你的代码本来就有问题。
页: [1]
查看完整版本: 自己写的二进制查看器无法正常使用