MCPcopy Create free account
hub / github.com/StrongPC123/Far-Cry-1-Source-Full / GetModuleCodeAddress

Function GetModuleCodeAddress

CrySystem/DataProbe.cpp:652–714  ·  view source on GitHub ↗

///////////////////////////////////////////////////////////////////// Get address of executable code RAM for loaded DLL or EXE. /////////////////////////////////////////////////////////////////////

Source from the content-addressed store, hash-verified

650// Get address of executable code RAM for loaded DLL or EXE.
651//////////////////////////////////////////////////////////////////////////
652static void GetModuleCodeAddress( void *base,void **pCodeStartAddress,int *nCodeSize )
653{
654 const IMAGE_DOS_HEADER *dos_head = (IMAGE_DOS_HEADER*)base;
655
656 assert(base);
657 assert(pCodeStartAddress);
658 assert(nCodeSize);
659
660 *pCodeStartAddress = 0;
661 *nCodeSize = 0;
662
663#include <pshpack1.h> // no padding.
664 const struct PEHeader
665 {
666 DWORD signature;
667 IMAGE_FILE_HEADER _head;
668 IMAGE_OPTIONAL_HEADER opt_head;
669 IMAGE_SECTION_HEADER *section_header; // actual number in NumberOfSections
670 }
671 *header;
672#include <poppack.h>
673
674 if (dos_head->e_magic != IMAGE_DOS_SIGNATURE)
675 {
676 // Wrong pointer, not to PE header.
677 return;
678 }
679 // verify DOS-EXE-Header
680 // after end of DOS-EXE-Header: offset to PE-Header
681 header = (PEHeader*)(const void *)((char *)dos_head + dos_head->e_lfanew);
682
683 if (IsBadReadPtr(header, sizeof(*header))) // start of PE-Header
684 {
685 // (no PE header, probably DOS executable)
686 return;
687 }
688
689/*
690 CryLog( "[CodeModule] base: %x",base );
691 CryLog( "[CodeModule] base of code: %x",header->opt_head.BaseOfCode );
692 CryLog( "[CodeModule] size of code: %x",header->opt_head.SizeOfCode );
693*/
694
695 void *pCodeAddress = (char*)base + header->opt_head.BaseOfCode;
696 if (IsBadReadPtr(pCodeAddress, header->opt_head.SizeOfCode ))
697 {
698 // Something wrong..., cant read code memory, skip it.
699 return;
700 }
701 *pCodeStartAddress = pCodeAddress;
702 *nCodeSize = header->opt_head.SizeOfCode;
703
704 /*
705 {
706 int sect;
707 const IMAGE_SECTION_HEADER *section_header;
708 for (sect = 0, section_header = header->section_header; sect < header->_head.NumberOfSections; sect++, section_header++)
709 {

Callers 2

GetRandomModuleProbeMethod · 0.85
GetModuleProbeMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected