this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

LC_ROUTINES/LC_ROUTINES64 support

+18 -4
+5 -4
src/libmach-o/MachO.h
··· 25 25 26 26 #include <string> 27 27 #include <vector> 28 + #include <list> 28 29 #include <stdexcept> 29 30 30 31 #include <mach/vm_types.h> ··· 122 123 uint64_t entry() const { return m_entry; } 123 124 uint64_t main() const { return m_main; } 124 125 125 - const std::vector<uint64_t>& init_funcs() const { return m_init_funcs; } 126 - const std::vector<uint64_t>& exit_funcs() const { return m_exit_funcs; } 126 + const std::list<uint64_t>& init_funcs() const { return m_init_funcs; } 127 + const std::list<uint64_t>& exit_funcs() const { return m_exit_funcs; } 127 128 128 129 std::pair<uint64_t,uint64_t> get_eh_frame() const { return m_eh_frame; } 129 130 std::pair<uint64_t,uint64_t> get_unwind_info() const { return m_unwind_info; } ··· 162 163 std::vector<Relocation*> m_relocations; 163 164 uintptr_t m_base; 164 165 uint64_t m_entry, m_main; 165 - std::vector<uint64_t> m_init_funcs; 166 - std::vector<uint64_t> m_exit_funcs; 166 + std::list<uint64_t> m_init_funcs; 167 + std::list<uint64_t> m_exit_funcs; 167 168 std::vector<uint64_t> m_tlv_init_funcs; 168 169 std::vector<TLVSection> m_tlv_sections; 169 170 uint64_t m_dyld_data;
+13
src/libmach-o/MachOImpl.cpp
··· 666 666 LOG << "LC_PREBOUND_DYLIB not handled\n"; // TODO: do we have to care? 667 667 break; 668 668 669 + case LC_ROUTINES: 670 + { 671 + routines_command* cmd = reinterpret_cast<routines_command*>(cmds_ptr); 672 + m_init_funcs.push_front(uint64_t(cmd->init_address) & 0xffffffff); 673 + break; 674 + } 675 + case LC_ROUTINES_64: 676 + { 677 + routines_command_64* cmd = reinterpret_cast<routines_command_64*>(cmds_ptr); 678 + m_init_funcs.push_front(cmd->init_address); 679 + break; 680 + } 681 + 669 682 default: 670 683 std::cerr << "Unhandled loader command " << std::hex << (int)cmds_ptr->cmd << std::dec << " - this could result in crashes" << std::endl; 671 684 break;