mirror of
				https://github.com/hedge-dev/XenonRecomp.git
				synced 2025-10-30 07:11:38 +00:00 
			
		
		
		
	Fix import thunk resolving.
This commit is contained in:
		
							parent
							
								
									918e09d380
								
							
						
					
					
						commit
						510cff56f2
					
				
					 5 changed files with 11 additions and 5 deletions
				
			
		|  | @ -1765,7 +1765,7 @@ bool Recompiler::Recompile(const Function& fn) | ||||||
|         if (insn.opcode == nullptr) |         if (insn.opcode == nullptr) | ||||||
|         { |         { | ||||||
|             println("\t// {}", insn.op_str); |             println("\t// {}", insn.op_str); | ||||||
| #if 0 | #if 1 | ||||||
|             if (*(data - 1) != 0) |             if (*(data - 1) != 0) | ||||||
|                 std::println("Unable to decode instruction {:X} at {:X}", *(data - 1), base - 4); |                 std::println("Unable to decode instruction {:X} at {:X}", *(data - 1), base - 4); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -163,6 +163,11 @@ void SWARecompiler::Analyse() | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             if (*(uint32_t*)data == 0x45564800) | ||||||
|  |             { | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|             auto fnSymbol = image.symbols.find(base); |             auto fnSymbol = image.symbols.find(base); | ||||||
|             if (fnSymbol != image.symbols.end() && fnSymbol->address == base && fnSymbol->type == Symbol_Function) |             if (fnSymbol != image.symbols.end() && fnSymbol->address == base && fnSymbol->type == Symbol_Function) | ||||||
|             { |             { | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ void Image::Map(const std::string_view& name, size_t base, uint32_t size, uint8_ | ||||||
| 
 | 
 | ||||||
| const void* Image::Find(size_t address) const | const void* Image::Find(size_t address) const | ||||||
| { | { | ||||||
|     const auto section = sections.find(address); |     const auto section = sections.lower_bound(address); | ||||||
|     if (section == sections.end()) |     if (section == sections.end()) | ||||||
|     { |     { | ||||||
|         return nullptr; |         return nullptr; | ||||||
|  |  | ||||||
|  | @ -39,7 +39,7 @@ struct SectionComparer | ||||||
| 
 | 
 | ||||||
|     bool operator()(const Section& lhs, size_t rhs) const |     bool operator()(const Section& lhs, size_t rhs) const | ||||||
|     { |     { | ||||||
|         return rhs > lhs.base + lhs.size; |         return lhs.base < rhs; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     bool operator()(size_t lhs, const Section& rhs) const |     bool operator()(size_t lhs, const Section& rhs) const | ||||||
|  | @ -49,6 +49,6 @@ struct SectionComparer | ||||||
| 
 | 
 | ||||||
|     bool operator()(const Section& lhs, const Section& rhs) const |     bool operator()(const Section& lhs, const Section& rhs) const | ||||||
|     { |     { | ||||||
|         return (lhs.base + lhs.size) < rhs.base; |         return lhs.base < rhs.base; | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -101,12 +101,13 @@ Image Xex2LoadImage(const uint8_t* data) | ||||||
|                 auto originalThunk = (XEX_THUNK_DATA*)image.Find(descriptors[im].FirstThunk); |                 auto originalThunk = (XEX_THUNK_DATA*)image.Find(descriptors[im].FirstThunk); | ||||||
|                 auto thunkType = originalThunk->Function >> 24; |                 auto thunkType = originalThunk->Function >> 24; | ||||||
| 
 | 
 | ||||||
|                 if (thunkType == 1) |                 if (thunkType != 0) | ||||||
|                 { |                 { | ||||||
|                     uint32_t thunk[4] = { 0x00000060, 0x00000060, 0x00000060, 0x2000804E }; |                     uint32_t thunk[4] = { 0x00000060, 0x00000060, 0x00000060, 0x2000804E }; | ||||||
|                     memcpy(originalThunk, thunk, sizeof(thunk)); |                     memcpy(originalThunk, thunk, sizeof(thunk)); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |             library = (XEX_IMPORT_LIBRARY*)((char*)(library + 1) + library->NumberOfImports * sizeof(XEX_IMPORT_DESCRIPTOR)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Skyth
						Skyth