2020-10-09 21:31:35 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#include <elfio/elf_types.hpp>
|
2020-10-11 07:08:49 +00:00
|
|
|
#include "elfio_c_wrapper.h"
|
2020-10-09 21:31:35 +00:00
|
|
|
|
|
|
|
int main( int argc, char* argv[] )
|
|
|
|
{
|
|
|
|
pelfio_t pelfio = elfio_new();
|
|
|
|
bool ret = elfio_load( pelfio, argv[0] );
|
|
|
|
|
|
|
|
if ( !ret ) {
|
|
|
|
printf( "Can't load ELF file\n" );
|
|
|
|
}
|
|
|
|
|
|
|
|
printf( "Header size : %d\n", elfio_get_header_size( pelfio ) );
|
|
|
|
printf( "Version : %d\n", elfio_get_version( pelfio ) );
|
|
|
|
printf( "Section Entry : %d\n", elfio_get_section_entry_size( pelfio ) );
|
|
|
|
printf( "Segment Entry : %d\n", elfio_get_segment_entry_size( pelfio ) );
|
|
|
|
|
2020-10-10 16:11:35 +00:00
|
|
|
/* Uncomment a block of the interest */
|
|
|
|
|
2020-10-09 21:31:35 +00:00
|
|
|
int secno = elfio_get_sections_num( pelfio );
|
|
|
|
printf( "\nSections No : %d\n", secno );
|
|
|
|
|
|
|
|
for ( int i = 0; i < secno; i++ ) {
|
|
|
|
psection_t psection = elfio_get_section_by_index( pelfio, i );
|
|
|
|
char buff[128];
|
|
|
|
elfio_section_get_name( psection, buff, 100 );
|
2020-10-12 05:57:26 +00:00
|
|
|
// printf( " [%02d] %s\n", i, buff );
|
|
|
|
// printf( " %08lx : %08lx\n",
|
|
|
|
// elfio_section_get_address( psection ),
|
|
|
|
// elfio_section_get_size( psection ) );
|
2020-10-09 21:31:35 +00:00
|
|
|
}
|
2020-10-10 16:11:35 +00:00
|
|
|
|
2020-10-09 21:31:35 +00:00
|
|
|
int segno = elfio_get_segments_num( pelfio );
|
|
|
|
printf( "\nSegments No : %d\n", segno );
|
|
|
|
|
|
|
|
for ( int i = 0; i < segno; i++ ) {
|
|
|
|
psegment_t psegment = elfio_get_segment_by_index( pelfio, i );
|
2020-10-12 05:57:26 +00:00
|
|
|
// printf( " [%02d] %08lx : %08lx : %08lx\n", i,
|
|
|
|
// elfio_segment_get_virtual_address( psegment ),
|
|
|
|
// elfio_segment_get_memory_size( psegment ),
|
|
|
|
// elfio_segment_get_file_size( psegment ) );
|
2020-10-09 21:31:35 +00:00
|
|
|
}
|
2020-10-10 05:52:26 +00:00
|
|
|
|
2020-10-10 16:11:35 +00:00
|
|
|
psection_t psection = elfio_get_section_by_name( pelfio, ".symtab" );
|
|
|
|
psymbol_t psymbols = elfio_symbol_section_accessor_new( pelfio, psection );
|
|
|
|
int symno = elfio_symbol_get_symbols_num( psymbols );
|
|
|
|
for ( int i = 0; i < symno; i++ ) {
|
|
|
|
char name[128];
|
|
|
|
Elf64_Addr value;
|
|
|
|
Elf_Xword size;
|
|
|
|
unsigned char bind;
|
|
|
|
unsigned char type;
|
|
|
|
Elf_Half section_index;
|
|
|
|
unsigned char other;
|
|
|
|
elfio_symbol_get_symbol( psymbols, i, name, 128, &value, &size,
|
|
|
|
&bind, &type, §ion_index, &other );
|
2020-10-12 05:57:26 +00:00
|
|
|
// printf( "[%4d] %10lu, %4lu %s\n", i, value, size, name );
|
2020-10-10 16:11:35 +00:00
|
|
|
}
|
|
|
|
elfio_symbol_section_accessor_delete( psymbols );
|
2020-10-09 21:31:35 +00:00
|
|
|
|
|
|
|
elfio_delete( pelfio );
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|