[原创]找程序入口地址源码
/************************************************************************** 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]