飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 1882|回复: 0

[C/C++] [原创]找程序入口地址源码

[复制链接]
  • TA的每日心情
    开心
    2022-11-16 14:28
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2009-7-28 21:21:11 | 显示全部楼层 |阅读模式
    /*************************************************************************
        * Copyright................  
        * 作 者 : 黄 奇
        * 文件名: PEMacro.cpp
        * 日 期 : 2009.7.25
        * 功 能 : 找出程序的入口地址
        * 描 述 :
        * .........................
        *
        *************************************************************************/

    #include <stdio.h>
    /*****************************************************************************
    * BASEADDRES :      基址(0x400000)
    * D8:               D8
    * PEADDRESS:        PE地址
    * PE:               PE标志
    * ENTROY :          保存入口偏移地址
    * ENTROYADDRESS :   入口地址
    *****************************************************************************/
    #define BASEADDRES      ((int *)(0x400000))
    #define D8              (*(BASEADDRES + 0xf))
    #define PEADDRES        (int *)((char *)BASEADDRES + D8)
    #define PE              (*PEADDRES)
    #define ENTROY          (PEADDRES + 0XA)
    #define ENTROYADDRESS   ((char *)BASEADDRES + *(ENTROY))

    int main(void)
    {
        // 判断是不是PE
        if (PE == 0x4550)
        {
            printf("程序入口地址是: %p\r\n", ENTROYADDRESS) ;
        }
        else
        {
            printf("ERROR! 找不到PE标志位!\r\n") ;
        }
        return 0 ;
    }




    #include <stdio.h>
    #define BASE ((int *)0x400000)

    int main(void)
    {
        int *p ;
       
        /*************************************************************************
        *
        *  *(BASE +0XF): 找到D8
        *  (char *)BASE + *(BASE + 0XF): 0x4000D8
        *  0x4000D8: 存放PE标志
        *  (char *)BASE + *(BASE + 0XF) + 0x28: 找到偏移地址
        *  *(int *)((char *)BASE + *(BASE + 0XF) + 0X28): 取出偏移地址
        *  (char *)BASE + 偏移地址: 定位到偏移地址
        *  最后转成int *
        *
        **************************************************************************/
        p = (int *)((char *)BASE + *(int *)((char *)BASE + *(BASE + 0XF) + 0X28)) ;
        printf("%p\r\n", p) ;
        return 0 ;
    }
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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