evilknight 发表于 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 ;
}
页: [1]
查看完整版本: [原创]找程序入口地址源码