写程序取自己进程的AEP

测试程序功能 

打印出自己进程的程序入口点地址.


结合OD载入程序,看到的入口点确实是0x004014f0, 说明程序入口点找到了


测试程序

/// @file exam_1_1.c

#include <stdlib.h>
#include <stdio.h>

void fnGetProgEntry();

int main(int agrc, char** argv)
{
    fnGetProgEntry();

    printf("END, press any key to quit\n");
    getchar();
    return 0;
}

void fnGetProgEntry()
{
    #define PE_SIGNTURE 0x4550 ///< "PE"

    int* pFileAddressOfNewHeader = NULL;
    int* pCOFFFileHeader = NULL;
    int* pAEP = NULL;
    const int iAddrPeImgBase = 0x400000;

    /// iOffsetX 为偏移
    /// iContent 为地址中的内容
    const int iOffsetFileAddressOfNewHeader = (16 * 4 - 4); ///< File address of new header 相对于DosHeader的偏移
    const int iOffsetAEPToFileAddressOfNewHeader = 0x28;

    int iContentFileAddressOfNewHeader = 0; 
    int iPeSignature = 0;
    int iOffsetAddressOfEntryPoint = 0; ///< 程序入口点偏移地址
    
    do 
    {
        pFileAddressOfNewHeader = (int*)(iAddrPeImgBase + iOffsetFileAddressOfNewHeader);
        iContentFileAddressOfNewHeader = *pFileAddressOfNewHeader; ///< iContentFileAddressOfNewHeader = 0xd0

        pCOFFFileHeader = (int*)(iAddrPeImgBase + iContentFileAddressOfNewHeader);
        iPeSignature = *pCOFFFileHeader;
        if (PE_SIGNTURE != iPeSignature)
        {
            printf("error pe file\n");
        }

        pAEP = (int*)((int)pCOFFFileHeader + iOffsetAEPToFileAddressOfNewHeader);
        iOffsetAddressOfEntryPoint = iAddrPeImgBase + *pAEP;
        printf("my address entry point is 0x%x\n", iOffsetAddressOfEntryPoint);
    } while (0);

    printf("END, press any key to quit\n");
}

运行结果



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值