55#include < boost/lexical_cast.hpp>
66#include < sstream>
77
8- #ifdef __APPLE__
9- #include " endian.h"
10- #elif WINDOWS
11- #include " endian.h"
8+ #if WINDOWS || __APPLE__
9+ #include " endian.hpp"
1210#else
1311#include < arpa/inet.h>
1412#endif
1513
16- namespace
14+ std::string getSymBinding (boost:: uint8_t p_info)
1715{
18- std::string getSymBinding (boost::uint8_t p_info)
16+ std::string str;
17+ switch ((p_info >> 4 ) & 0x0f )
1918 {
20- switch ((p_info >> 4 ) & 0x0f )
21- {
22- case elf::symbol::k_local:
23- return " STB_LOCAL" ;
24- case elf::symbol::k_global:
25- return " STB_GLOBAL" ;
26- case elf::symbol::k_weak:
27- return " STB_WEAK" ;
28- default :
29- return boost::lexical_cast<std::string>((p_info >> 4 ) & 0x0f );
30- }
19+ case elf::symbol::k_local:
20+ str = " STB_LOCAL" ;
21+ case elf::symbol::k_global:
22+ str = " STB_GLOBAL" ;
23+ case elf::symbol::k_weak:
24+ str = " STB_WEAK" ;
25+ default :
26+ str = boost::lexical_cast<std::string>((p_info >> 4 ) & 0x0f );
3127 }
28+ return str;
29+ }
3230
33- std::string getSymType (boost::uint8_t p_info)
31+ std::string getSymType (boost::uint8_t p_info)
32+ {
33+ std::string str;
34+ switch (p_info & 0x0f )
3435 {
35- switch (p_info & 0x0f )
36- {
37- case elf::symbol::k_notype:
38- return " STT_NOTYPE" ;
39- case elf::symbol::k_object:
40- return " STT_OBJECT" ;
41- case elf::symbol::k_function:
42- return " STT_FUNC" ;
43- case elf::symbol::k_section:
44- return " STT_SECTION" ;
45- case elf::symbol::k_file:
46- return " STT_FILE" ;
47- case elf::symbol::k_common:
48- return " STT_COMMON" ;
49- case elf::symbol::k_tls:
50- return " STT_TLS" ;
51- default :
52- return boost::lexical_cast<std::string>(p_info & 0x0f );
53- }
36+ case elf::symbol::k_notype:
37+ str = " STT_NOTYPE" ;
38+ case elf::symbol::k_object:
39+ str = " STT_OBJECT" ;
40+ case elf::symbol::k_function:
41+ str = " STT_FUNC" ;
42+ case elf::symbol::k_section:
43+ str = " STT_SECTION" ;
44+ case elf::symbol::k_file:
45+ str = " STT_FILE" ;
46+ case elf::symbol::k_common:
47+ str = " STT_COMMON" ;
48+ case elf::symbol::k_tls:
49+ str = " STT_TLS" ;
50+ default :
51+ str = boost::lexical_cast<std::string>(p_info & 0x0f );
5452 }
53+
54+ return str;
5555}
5656
57- AbstractSymbol::AbstractSymbol (const char * p_data, boost::uint32_t p_offset,
58- bool p_is64, bool p_isLE) :
59- m_symbol32(),
60- m_symbol64(),
61- m_name(),
62- m_is64(p_is64),
63- m_isLE(p_isLE)
57+ AbstractSymbol::AbstractSymbol (const char *p_data, boost::uint32_t p_offset,
58+ bool p_is64, bool p_isLE) : m_symbol32(),
59+ m_symbol64(),
60+ m_name(),
61+ m_is64(p_is64),
62+ m_isLE(p_isLE)
6463{
6564 if (m_is64)
66- {
67- m_symbol64 = reinterpret_cast <const elf::symbol::symtable_entry64*>(p_data + p_offset);
68- }
65+ m_symbol64 = reinterpret_cast <const elf::symbol::symtable_entry64 *>(p_data + p_offset);
6966 else
70- {
71- m_symbol32 = reinterpret_cast <const elf::symbol::symtable_entry32*>(p_data + p_offset);
72- }
67+ m_symbol32 = reinterpret_cast <const elf::symbol::symtable_entry32 *>(p_data + p_offset);
7368
7469 std::stringstream value;
7570 value << " 0x" << std::hex << getValue ();
7671 m_name.assign (value.str ());
7772}
7873
79- AbstractSymbol::AbstractSymbol (const AbstractSymbol& p_rhs) :
80- m_symbol32(p_rhs.m_symbol32),
81- m_symbol64(p_rhs.m_symbol64),
82- m_name(p_rhs.m_name),
83- m_is64(p_rhs.m_is64),
84- m_isLE(p_rhs.m_isLE)
74+ AbstractSymbol::AbstractSymbol (const AbstractSymbol &p_rhs)
8575{
76+ m_symbol32 = p_rhs.m_symbol32 ;
77+ m_symbol64 = p_rhs.m_symbol64 ;
78+ m_name = p_rhs.m_name ;
79+ m_is64 = p_rhs.m_is64 ;
80+ m_isLE = p_rhs.m_isLE ;
8681}
8782
8883AbstractSymbol::~AbstractSymbol ()
@@ -91,29 +86,35 @@ AbstractSymbol::~AbstractSymbol()
9186
9287boost::uint32_t AbstractSymbol::getStructSize () const
9388{
89+ boost::uint32_t size;
9490 if (m_is64)
95- {
96- return sizeof (elf::symbol::symtable_entry64);
97- }
98- return sizeof (elf::symbol::symtable_entry32);
91+ size = sizeof (elf::symbol::symtable_entry64);
92+ else
93+ size = sizeof (elf::symbol::symtable_entry32);
94+
95+ return size;
9996}
10097
10198boost::uint8_t AbstractSymbol::getType () const
10299{
100+ boost::uint8_t type;
103101 if (m_is64)
104- {
105- return m_symbol64->m_info & 0x0f ;
106- }
107- return m_symbol32->m_info & 0x0f ;
102+ type = m_symbol64->m_info & 0x0f ;
103+ else
104+ type = m_symbol32->m_info & 0x0f ;
105+
106+ return type;
108107}
109108
110109boost::uint8_t AbstractSymbol::getInfo () const
111110{
111+ boost::uint8_t info;
112112 if (m_is64)
113- {
114- return m_symbol64->m_info ;
115- }
116- return m_symbol32->m_info ;
113+ info = m_symbol64->m_info ;
114+ else
115+ info = m_symbol32->m_info ;
116+
117+ return info;
117118}
118119
119120std::string AbstractSymbol::getTypeName () const
@@ -128,40 +129,44 @@ std::string AbstractSymbol::getBinding() const
128129
129130boost::uint64_t AbstractSymbol::getValue () const
130131{
132+ boost::uint64_t value;
131133 if (m_is64)
132- {
133- return m_isLE ? m_symbol64->m_address : htobe64 (m_symbol64->m_address );
134- }
135- return m_isLE ? m_symbol32->m_address : ntohl (m_symbol32->m_address );
134+ value = m_isLE ? m_symbol64->m_address : htobe64 (m_symbol64->m_address );
135+ else
136+ value = m_isLE ? m_symbol32->m_address : ntohl (m_symbol32->m_address );
137+
138+ return value;
136139}
137140
138141boost::uint32_t AbstractSymbol::getNameIndex () const
139142{
143+ boost::uint32_t name;
140144 if (m_is64)
141- {
142- return m_isLE ? m_symbol64->m_name : ntohl (m_symbol64->m_name );
143- }
144- return m_isLE ? m_symbol32->m_name : ntohl (m_symbol32->m_name );
145+ name = m_isLE ? m_symbol64->m_name : ntohl (m_symbol64->m_name );
146+ else
147+ name = m_isLE ? m_symbol32->m_name : ntohl (m_symbol32->m_name );
148+
149+ return name;
145150}
146151
147152boost::uint16_t AbstractSymbol::getSectionIndex () const
148153{
154+ boost::uint16_t index;
149155 if (m_is64)
150- {
151- return m_isLE ? m_symbol64->m_shndx : ntohs (m_symbol64->m_shndx );
152- }
153- return m_isLE ? m_symbol32->m_shndx : ntohs (m_symbol32->m_shndx );
156+ index = m_isLE ? m_symbol64->m_shndx : ntohs (m_symbol64->m_shndx );
157+ else
158+ index = m_isLE ? m_symbol32->m_shndx : ntohs (m_symbol32->m_shndx );
159+
160+ return index;
154161}
155162
156- const std::string& AbstractSymbol::getName () const
163+ const std::string & AbstractSymbol::getName () const
157164{
158165 return m_name;
159166}
160167
161- void AbstractSymbol::setName (const std::string& p_name)
168+ void AbstractSymbol::setName (const std::string & p_name)
162169{
163170 if (!p_name.empty ())
164- {
165171 m_name.assign (p_name);
166- }
167- }
172+ }
0 commit comments