mirror of
https://github.com/serge1/COFFI
synced 2026-06-08 17:24:32 +00:00
72 lines
2.0 KiB
C++
72 lines
2.0 KiB
C++
//! [ex_reader_include]
|
|
#include <iostream>
|
|
#include <coffi/coffi.hpp>
|
|
|
|
using namespace COFFI;
|
|
|
|
int main( int argc, char** argv )
|
|
{
|
|
//! [ex_reader_include]
|
|
if ( argc != 2 ) {
|
|
std::cout << "Usage: tutorial <coff_file>" << std::endl;
|
|
return 1;
|
|
}
|
|
|
|
//! [ex_reader_create]
|
|
// Create an coffi reader
|
|
coffi reader;
|
|
|
|
// Load COFF data
|
|
if ( !reader.load( argv[1] ) ) {
|
|
std::cout << "Can't find or process COFF file " << argv[1] << std::endl;
|
|
return 2;
|
|
}
|
|
//! [ex_reader_create]
|
|
|
|
//! [ex_reader_archi]
|
|
// Print COFF file properties
|
|
std::cout << "COFF file architecture: ";
|
|
switch (reader.get_architecture()) {
|
|
case COFFI_ARCHITECTURE_PE:
|
|
if (reader.get_optional_header()) {
|
|
if (reader.get_optional_header()->get_magic() == OH_MAGIC_PE32PLUS ) {
|
|
std::cout << "Portable Executable PE32+" << std::endl;
|
|
} else {
|
|
std::cout << "Portable Executable PE32" << std::endl;
|
|
}
|
|
} else {
|
|
std::cout << "Portable Executable" << std::endl;
|
|
}
|
|
break;
|
|
case COFFI_ARCHITECTURE_CEVA:
|
|
std::cout << "CEVA" << std::endl;
|
|
break;
|
|
case COFFI_ARCHITECTURE_TI:
|
|
std::cout << "Texas Instruments" << std::endl;
|
|
break;
|
|
}
|
|
//! [ex_reader_archi]
|
|
|
|
//! [ex_reader_sections]
|
|
// Print the COFF file sections info
|
|
auto sec_num = reader.get_sections().size();
|
|
std::cout << "Number of sections: " << sec_num << std::endl;
|
|
for (auto sec: reader.get_sections()) {
|
|
std::cout << " [" << sec->get_index() << "] "
|
|
<< sec->get_name()
|
|
<< "\t"
|
|
<< sec->get_data_size()
|
|
<< std::endl;
|
|
}
|
|
//! [ex_reader_sections]
|
|
|
|
//! [ex_reader_symbols]
|
|
// Print COFF file symbols info
|
|
for (auto sym: *reader.get_symbols()) {
|
|
std::cout << sym.get_index() << " " << sym.get_name() << " " << sym.get_value() << std::endl;
|
|
}
|
|
//! [ex_reader_symbols]
|
|
|
|
return 0;
|
|
}
|