mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 00:22:43 +00:00 
			
		
		
		
	 15a14d3d21
			
		
	
	
		15a14d3d21
		
	
	
	
	
		
			
			Since our executables are position-independent, the address values extraced from processes don't correspond to their values within the ELF file. We have to offset the absolute addresses by the load base address to get the relative symbol that we need for disassembly.
		
			
				
	
	
		
			31 lines
		
	
	
	
		
			643 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
	
		
			643 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2020-2021, the SerenityOS developers.
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <LibELF/Image.h>
 | |
| #include <LibX86/Instruction.h>
 | |
| 
 | |
| namespace X86 {
 | |
| 
 | |
| class ELFSymbolProvider final : public SymbolProvider {
 | |
| public:
 | |
|     ELFSymbolProvider(const ELF::Image& elf, FlatPtr base_address = 0)
 | |
|         : m_elf(elf)
 | |
|         , m_base_address(base_address)
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     virtual String symbolicate(FlatPtr address, u32* offset = nullptr) const override
 | |
|     {
 | |
|         return m_elf.symbolicate(address - m_base_address, offset);
 | |
|     }
 | |
| 
 | |
| private:
 | |
|     const ELF::Image& m_elf;
 | |
|     FlatPtr m_base_address;
 | |
| };
 | |
| }
 |