mirror of
				https://github.com/hedge-dev/XenonRecomp.git
				synced 2025-10-30 07:11:38 +00:00 
			
		
		
		
	Add X_RUNTIME_FUNCTION
This commit is contained in:
		
							parent
							
								
									6e48ca31ab
								
							
						
					
					
						commit
						9d6c760ab9
					
				
					 4 changed files with 39 additions and 8 deletions
				
			
		|  | @ -20,6 +20,19 @@ const void* Image::Find(size_t address) const | ||||||
|     return section->data + (address - section->base); |     return section->data + (address - section->base); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | const Section* Image::Find(const std::string_view& name) const | ||||||
|  | { | ||||||
|  |     for (const auto& section : sections) | ||||||
|  |     { | ||||||
|  |         if (section.name == name) | ||||||
|  |         { | ||||||
|  |             return §ion; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return nullptr; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| std::expected<Image, int> Image::ParseImage(const uint8_t* data, size_t size) | std::expected<Image, int> Image::ParseImage(const uint8_t* data, size_t size) | ||||||
| { | { | ||||||
|     if (data[0] == ELFMAG0 && data[1] == ELFMAG1 && data[2] == ELFMAG2 && data[3] == ELFMAG3) |     if (data[0] == ELFMAG0 && data[1] == ELFMAG1 && data[2] == ELFMAG2 && data[3] == ELFMAG3) | ||||||
|  |  | ||||||
|  | @ -32,6 +32,12 @@ struct Image | ||||||
|      */ |      */ | ||||||
|     const void* Find(size_t address) const; |     const void* Find(size_t address) const; | ||||||
| 
 | 
 | ||||||
|  |     /**
 | ||||||
|  |      * \param name Name of section | ||||||
|  |      * \return Section | ||||||
|  |      */ | ||||||
|  |     const Section* Find(const std::string_view& name) const; | ||||||
|  | 
 | ||||||
|     /**
 |     /**
 | ||||||
|      * \brief Parse given data to an image, reallocates with ownership |      * \brief Parse given data to an image, reallocates with ownership | ||||||
|      * \param data Pointer to data |      * \param data Pointer to data | ||||||
|  |  | ||||||
|  | @ -162,6 +162,24 @@ struct _XLIST_ENTRY; | ||||||
| typedef _XLIST_ENTRY XLIST_ENTRY; | typedef _XLIST_ENTRY XLIST_ENTRY; | ||||||
| typedef xpointer<XLIST_ENTRY> PXLIST_ENTRY; | typedef xpointer<XLIST_ENTRY> PXLIST_ENTRY; | ||||||
| 
 | 
 | ||||||
|  | typedef struct _X_RUNTIME_FUNCTION | ||||||
|  | { | ||||||
|  |     DWORD BeginAddress; | ||||||
|  | 
 | ||||||
|  |     union  | ||||||
|  |     { | ||||||
|  |         DWORD Data; | ||||||
|  |         struct | ||||||
|  |         { | ||||||
|  |             DWORD FunctionType : 2; | ||||||
|  |             DWORD FunctionLength : 22; | ||||||
|  |             DWORD PrologLength : 8; | ||||||
|  |         }; | ||||||
|  |     }; | ||||||
|  | } X_RUNTIME_FUNCTION; | ||||||
|  | 
 | ||||||
|  | static_assert(sizeof(X_RUNTIME_FUNCTION) == 8); | ||||||
|  | 
 | ||||||
| typedef struct _XLIST_ENTRY | typedef struct _XLIST_ENTRY | ||||||
| { | { | ||||||
|     XDWORD Flink; |     XDWORD Flink; | ||||||
|  | @ -285,4 +303,4 @@ typedef struct _XKSEMAPHORE | ||||||
| { | { | ||||||
|     XDISPATCHER_HEADER Header; |     XDISPATCHER_HEADER Header; | ||||||
|     XDWORD Limit; |     XDWORD Limit; | ||||||
| } XKSEMAPHORE; | } XKSEMAPHORE; | ||||||
|  |  | ||||||
|  | @ -90,12 +90,6 @@ typedef struct _XEX_HEADER | ||||||
|     be<uint32_t> NumberOfOptionalHeaders; |     be<uint32_t> NumberOfOptionalHeaders; | ||||||
| } XEX_HEADER; | } XEX_HEADER; | ||||||
| 
 | 
 | ||||||
| typedef struct _X_RUNTIME_FUNCTION |  | ||||||
| { |  | ||||||
|     be<DWORD> BeginAddress; |  | ||||||
|     be<DWORD> Flags; // honestly, no idea
 |  | ||||||
| } X_RUNTIME_FUNCTION; |  | ||||||
| 
 |  | ||||||
| template<typename T> | template<typename T> | ||||||
| inline static const T* Xex2FindOptionalHeader(const void* base, const XEX_OPTIONAL_HEADER* headers, size_t n, _XEX_OPTIONAL_HEADER_TYPES type) | inline static const T* Xex2FindOptionalHeader(const void* base, const XEX_OPTIONAL_HEADER* headers, size_t n, _XEX_OPTIONAL_HEADER_TYPES type) | ||||||
| { | { | ||||||
|  | @ -124,4 +118,4 @@ inline static const T* Xex2FindOptionalHeader(const XEX_HEADER* header, _XEX_OPT | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| struct Image; | struct Image; | ||||||
| Image Xex2LoadImage(const uint8_t* data); | Image Xex2LoadImage(const uint8_t* data); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Sajid
						Sajid