写程序取自己进程的AEP

时间:2023-03-09 18:12:57
写程序取自己进程的AEP

测试程序功能

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

写程序取自己进程的AEP

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

写程序取自己进程的AEP

测试程序

  1. /// @file exam_1_1.c
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. void fnGetProgEntry();
  5. int main(int agrc, char** argv)
  6. {
  7. fnGetProgEntry();
  8. printf("END, press any key to quit\n");
  9. getchar();
  10. return 0;
  11. }
  12. void fnGetProgEntry()
  13. {
  14. #define PE_SIGNTURE 0x4550 ///< "PE"
  15. int* pFileAddressOfNewHeader = NULL;
  16. int* pCOFFFileHeader = NULL;
  17. int* pAEP = NULL;
  18. const int iAddrPeImgBase = 0x400000;
  19. /// iOffsetX 为偏移
  20. /// iContent 为地址中的内容
  21. const int iOffsetFileAddressOfNewHeader = (16 * 4 - 4); ///< File address of new header 相对于DosHeader的偏移
  22. const int iOffsetAEPToFileAddressOfNewHeader = 0x28;
  23. int iContentFileAddressOfNewHeader = 0;
  24. int iPeSignature = 0;
  25. int iOffsetAddressOfEntryPoint = 0; ///< 程序入口点偏移地址
  26. do
  27. {
  28. pFileAddressOfNewHeader = (int*)(iAddrPeImgBase + iOffsetFileAddressOfNewHeader);
  29. iContentFileAddressOfNewHeader = *pFileAddressOfNewHeader; ///< iContentFileAddressOfNewHeader = 0xd0
  30. pCOFFFileHeader = (int*)(iAddrPeImgBase + iContentFileAddressOfNewHeader);
  31. iPeSignature = *pCOFFFileHeader;
  32. if (PE_SIGNTURE != iPeSignature)
  33. {
  34. printf("error pe file\n");
  35. }
  36. pAEP = (int*)((int)pCOFFFileHeader + iOffsetAEPToFileAddressOfNewHeader);
  37. iOffsetAddressOfEntryPoint = iAddrPeImgBase + *pAEP;
  38. printf("my address entry point is 0x%x\n", iOffsetAddressOfEntryPoint);
  39. } while (0);
  40. printf("END, press any key to quit\n");
  41. }

运行结果

写程序取自己进程的AEP

http://blog.csdn.net/lostspeed/article/details/49506193