鱼C论坛

 找回密码
 立即注册
查看: 2491|回复: 8

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

[复制链接]
发表于 2017-8-2 14:30:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-2 18:11:59 | 显示全部楼层
这样算正常吗?
2017-08-02_180959.png
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-3 09:19:56 | 显示全部楼层
ba21 发表于 2017-8-2 18:11
这样算正常吗?

第二行里本来应该有个00B8,但是没有输出出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-3 10:13:56 | 显示全部楼层
2017-08-03_101120.png
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-3 10:32:49 | 显示全部楼层

我是说,PE文件的DOS头的e_sp标记本应该是00B8,但是我的程序打印出来后是0000。。。
科普:PE文件指的是windows下的可执行文件,这些可执行文件都遵守PE结构。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-3 10:34:20 | 显示全部楼层
我是说,PE文件的DOS头的e_sp标记本应该是00B8,但是我的程序打印出来后是0000。。。
科普:PE文件指的是windows下的可执行文件,这些可执行文件都遵守PE结构。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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


2017-08-03_104715.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

???为什么我的就不可以???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-3 11:47:27 | 显示全部楼层
1314xxxxxx 发表于 2017-8-3 11:17
???为什么我的就不可以???

让它显示到0x200就break啊。
你的代码本来就有问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-28 12:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表