mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 15:40:19 +00:00
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.
This commit is contained in:
parent
7c27ba1240
commit
15a14d3d21
Notes:
sideshowbarker
2024-07-18 01:54:40 +09:00
Author: https://github.com/BertalanD Commit: https://github.com/SerenityOS/serenity/commit/15a14d3d21c Pull-request: https://github.com/SerenityOS/serenity/pull/10635 Issue: https://github.com/SerenityOS/serenity/issues/10628
2 changed files with 6 additions and 4 deletions
|
@ -87,7 +87,7 @@ DisassemblyModel::DisassemblyModel(Profile& profile, ProfileNode& node)
|
|||
auto symbol_offset_from_function_start = node.address() - base_address - symbol->value();
|
||||
auto view = symbol.value().raw_data().substring_view(symbol_offset_from_function_start);
|
||||
|
||||
X86::ELFSymbolProvider symbol_provider(*elf);
|
||||
X86::ELFSymbolProvider symbol_provider(*elf, base_address);
|
||||
X86::SimpleInstructionStream stream((const u8*)view.characters_without_null_termination(), view.length());
|
||||
X86::Disassembler disassembler(stream);
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue