From 15a14d3d21c7e94f5c174f0b2644393093ae9d35 Mon Sep 17 00:00:00 2001 From: Daniel Bertalan Date: Mon, 25 Oct 2021 11:09:33 +0200 Subject: LibX86: Take load base address into consideration during disassembly 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. --- Userland/Libraries/LibX86/ELFSymbolProvider.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'Userland/Libraries/LibX86') diff --git a/Userland/Libraries/LibX86/ELFSymbolProvider.h b/Userland/Libraries/LibX86/ELFSymbolProvider.h index fb00aa7ebb..adc8f20d62 100644 --- a/Userland/Libraries/LibX86/ELFSymbolProvider.h +++ b/Userland/Libraries/LibX86/ELFSymbolProvider.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, the SerenityOS developers. + * Copyright (c) 2020-2021, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ @@ -13,17 +13,19 @@ namespace X86 { class ELFSymbolProvider final : public SymbolProvider { public: - ELFSymbolProvider(const ELF::Image& elf) + 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, offset); + return m_elf.symbolicate(address - m_base_address, offset); } private: const ELF::Image& m_elf; + FlatPtr m_base_address; }; } -- cgit v1.2.3