| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1874 人关注过本帖
标题:关键字:基础 EXE PE C 复习 一
只看楼主 加入收藏
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
结帖率:92.31%
收藏
已结贴  问题点数:100 回复次数:23 
关键字:基础 EXE PE C 复习 一
观看此贴需要基本的C知识---会写你好世界 会查MSDN 会谷歌百度
需要稍微了解一点点的数据结构知识---不了解也问题不是很大
需要一点点的耐心


=================================================================
程序代码:
lkd> dt _IMAGE_DOS_HEADER
nt!_IMAGE_DOS_HEADER
   +0x000 e_magic          : Uint2B
   +0x002 e_cblp           : Uint2B
   +0x004 e_cp             : Uint2B
   +0x006 e_crlc           : Uint2B
   +0x008 e_cparhdr        : Uint2B
   +0x00a e_minalloc       : Uint2B
   +0x00c e_maxalloc       : Uint2B
   +0x00e e_ss             : Uint2B
   +0x010 e_sp             : Uint2B
   +0x012 e_csum           : Uint2B
   +0x014 e_ip             : Uint2B
   +0x016 e_cs             : Uint2B
   +0x018 e_lfarlc         : Uint2B
   +0x01a e_ovno           : Uint2B
   +0x01c e_res            : [4] Uint2B
   +0x024 e_oemid          : Uint2B
   +0x026 e_oeminfo        : Uint2B
   +0x028 e_res2           : [10] Uint2B
   +0x03c e_lfanew         : Int4B

win32下的EXE DLL 文件都是PE结构,所以我们统称这些为PE文件。
学习PE文件结构,首先需要了解的就是 IMAGE_DOS_HEADER  结构


PE文件结构的第一个结构,就是   IMAGE_DOS_HEADER ,即DOS头,
这个是以前16位的遗留,虽然已经用处不大,但是在PE文件中还是必不可少
的部分,使用DOS头中的标志可以判断该文件是否是合法的EXE或者DLL。

上面是我在自己电脑上使用windbg查看的    IMAGE_DOS_HEADER 结构。
这个是不会变的。 你也可以在VC里直接查找该定义,好象在winnt.h中。
程序代码:
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"

int main(int argc, char* argv[])
{
    FILE *p;
    IMAGE_DOS_HEADER    tou;
    unsigned long       biaozhi;

    p = fopen("bccn.exe","r+b");
    if(p == NULL)
        return -1;

    fread(&tou,sizeof(tou),1,p);
    fseek(p,tou.e_lfanew,SEEK_SET);
    fread(&biaozhi,4,1,p);
    fclose(p);

    printf("IMAGE_DOS_HEADER dump:\n");
    printf("e_magic   : %08x\n",tou.e_magic);
    printf("e_cblp    : %08x\n",tou.e_cblp);
    printf("e_cp      : %08x\n",tou.e_cp);
    printf("e_crlc    : %08x\n",tou.e_crlc);
    printf("e_cparhdr : %08x\n",tou.e_cparhdr);
    printf("e_minalloc: %08x\n",tou.e_minalloc);
    printf("e_maxalloc: %08x\n",tou.e_maxalloc);
    printf("e_ss      : %08x\n",tou.e_ss);
    printf("e_sp      : %08x\n",tou.e_sp);
    printf("e_csum    : %08x\n",tou.e_csum);
    printf("e_ip      : %08x\n",tou.e_ip);
    printf("e_cs      : %08x\n",tou.e_cs);
    printf("e_lfarlc  : %08x\n",tou.e_lfarlc);
    printf("e_ovno    : %08x\n",tou.e_ovno);
    printf("e_res[4]  : %08x\n",tou.e_res[4]);
    printf("e_oemid   : %08x\n",tou.e_oemid);
    printf("e_oeminfo : %08x\n",tou.e_oeminfo);
    printf("e_res2[10]: %08x\n",tou.e_res2[10]);
    printf("e_lfanew  : %08x\n",tou.e_lfanew);


    if((tou.e_magic ==IMAGE_DOS_SIGNATURE) &&
        (biaozhi == IMAGE_NT_SIGNATURE))
        printf("PE文件\n");
    else
        printf("不是PE文件\n");
    return 0;
}

上面代码很简单,就是打开一个文件,将它的IMAGE_DOS_HEADER结构输出,
并且判断其中2个位置是否符合PE文件规范,如果是,就可认为是PE文件。
IMAGE_DOS_HEADER结构在windows.h有声明,直接可以用。
建议安装VAX 即VC助手。很方便。

新建一个win32控制台项目,拷贝上面代码 生成EXE。
将任一文件比如 .txt  .bmp  .jpg .exe等等改名为 bccn.exe 和生成的EXE放同一文件夹里,然后开始--程序--附件--命令提示符 进入控制台窗口  CD命令 进入EXE目录,运行之,就会有信息输出了。

这个主要看代码
DOS头部分很简单,主要就是偏移0X00和0X3C处的值。

因为这贴写的比较匆忙。但是应该不影响理解。 下贴写详细点。

学习这个东东刚开始的时候会比较头晕,习惯就好了。
有兴趣的朋友可以自己找资料详学。






搜索更多相关主题的帖子: 关键字 谷歌百度 
2011-02-09 00:32
我是西瓜
Rank: 2
等 级:论坛游民
帖 子:61
专家分:97
注 册:2010-10-22
收藏
得分:7 
lkd> dt _IMAGE_DOS_HEADER
nt!_IMAGE_DOS_HEADER
   +0x000 e_magic          : Uint2B
   +0x002 e_cblp           : Uint2B
   +0x004 e_cp             : Uint2B
   +0x006 e_crlc           : Uint2B
   +0x008 e_cparhdr        : Uint2B
   +0x00a e_minalloc       : Uint2B
   +0x00c e_maxalloc       : Uint2B
   +0x00e e_ss             : Uint2B
   +0x010 e_sp             : Uint2B
   +0x012 e_csum           : Uint2B
   +0x014 e_ip             : Uint2B
   +0x016 e_cs             : Uint2B
   +0x018 e_lfarlc         : Uint2B
   +0x01a e_ovno           : Uint2B
   +0x01c e_res            : [4] Uint2B
   +0x024 e_oemid          : Uint2B
   +0x026 e_oeminfo        : Uint2B
   +0x028 e_res2           : [10] Uint2B
   +0x03c e_lfanew         : Int4B
这是什么东西

2011-02-09 00:39
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 
如果你是用的windows,这个就是你电脑里的所有的EXE文件的前3C字节的内容所描述的
意思

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2011-02-09 00:48
huangapple
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:545
专家分:1790
注 册:2010-12-30
收藏
得分:7 
先接分。。

勤能补拙,熟能生巧!
2011-02-09 00:58
cacker
该用户已被删除
收藏
得分:7 
提示: 作者被禁止或删除 内容自动屏蔽
2011-02-09 01:26
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:7 
果断表示支持!

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2011-02-09 08:34
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:7 
别乱搞了
2011-02-09 09:32
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:7 
楼主啊, 我劝你远离 是非之地~~

我就是真命天子,顺我者生,逆我者死!
2011-02-09 15:52
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 
以下是引用BlueGuy在2011-2-9 15:52:53的发言:

楼主啊, 我劝你远离 是非之地~~
这些东东既不酷又不炫,
属于在win环境下编程的内功,
偶也完全是C盲,
只是因为这方面的知识忘了,想重新复习复习,以前用汇编,现在顺带着
学习学习C语言。
像偶这样的人 是不会“伟大”到专门发贴“帮助人指导人”的层次的。
发贴主要是自己记录 自己学习,如果有朋友看了 觉得感兴趣 或者是由此
贴知道了某些名词某些概念 偶就认为是莫大的意外之功了。

此处略去一万字

你懂的



===========================================================
直接编辑 接主贴:

趁手的工具是必不可少的,Stud_PE 就是一款学习PE结构的好工具,有
兴趣的朋友可以百度这个关键字 自己下载。

下载好后,运行Stud_PE,文件--打开,打开主贴里生成的EXE,然后菜单拦
打开 DOS 选项卡,这就是DOS头的信息了,然后点开 在十六进制编辑器中查看 ,
就可以很方便查看PE文件头了。

图片附件: 游客没有浏览图片的权限,请 登录注册


如上图,点开DOS文件头,就可以查看主贴里所说的IMAGE_DOS_HEADER结构,
并可以查看EXE在磁盘中的对应的部分。




[ 本帖最后由 你们都要疼我哦 于 2011-2-9 18:35 编辑 ]

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2011-02-09 18:06
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
我表示偶决定远离这个是非之地,论坛已经不是偶这个层次的人物应该混的地方了~~

我就是真命天子,顺我者生,逆我者死!
2011-02-09 18:16
快速回复:关键字:基础 EXE PE C 复习 一
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017670 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved