diff --git a/src/common/elf/elffile.cpp b/src/common/elf/elffile.cpp --- a/src/common/elf/elffile.cpp +++ b/src/common/elf/elffile.cpp @@ -29,61 +29,58 @@ ElfFile::ElfFile(QObject *parent) : } ElfFile::ElfFile(const QString &File, QObject *parent) - :abstractExecFile(parent) + :abstractExecFile(parent),elfparser() { this->p_fileName = File; - parser.setFilename(File); + setFilename(File); } bool ElfFile::openFile(const QString &File) { this->p_fileName = File; - parser.setFilename(File); + return setFilename(File); } bool ElfFile::isopened() { - return parser.isopened(); + return elfparser::isopened(); } int ElfFile::closeFile() { - return parser.closeFile(); + return elfparser::closeFile(); } -QList ElfFile::getFragments() -{ - QList fragments; - if (parser.isopened()) - { - fragments.append(getFragment(".text")); - fragments.append(getFragment(".data")); - } -} QList ElfFile::getFragments(QStringList fragmentList) { QList fragments; - if (parser.isopened()) + if (isopened()) { for(int i =0;i ElfFile::getFragments() +{ + return getFragments(QStringList()<<".data"<<".text"); } codeFragment ElfFile::getFragment(const QString &name) { codeFragment fragment; - for(int i=0;i getFragments(); QList getFragments(QStringList fragmentList); +// elfparser parser; + signals: public slots: private: - elfparser parser; codeFragment getFragment(const QString& name); }; diff --git a/src/common/elf/elffilewidget.cpp b/src/common/elf/elffilewidget.cpp --- a/src/common/elf/elffilewidget.cpp +++ b/src/common/elf/elffilewidget.cpp @@ -12,3 +12,15 @@ elfFileWidget::~elfFileWidget() { delete ui; } + +void elfFileWidget::updateElfFile(ElfFile *file) +{ + this->p_elf = file; + if(p_elf->isopened() && p_elf->iself()) + { + this->ui->classLabel->setText(p_elf->getClass()); + this->ui->VersionLabel->setText(QString::number(p_elf->getVersion())); + this->ui->machineLabel->setText(p_elf->getArchitecture()); + this->ui->endiannesLabel->setText(p_elf->getEndianness()); + } +} diff --git a/src/common/elf/elffilewidget.h b/src/common/elf/elffilewidget.h --- a/src/common/elf/elffilewidget.h +++ b/src/common/elf/elffilewidget.h @@ -2,6 +2,7 @@ #define ELFFILEWIDGET_H #include +#include "elffile.h" namespace Ui { class elfFileWidget; @@ -14,9 +15,12 @@ class elfFileWidget : public QWidget public: explicit elfFileWidget(QWidget *parent = 0); ~elfFileWidget(); +public slots: + void updateElfFile(ElfFile* file); private: Ui::elfFileWidget *ui; + ElfFile* p_elf; }; #endif // ELFFILEWIDGET_H diff --git a/src/common/elf/elffilewidget.ui b/src/common/elf/elffilewidget.ui --- a/src/common/elf/elffilewidget.ui +++ b/src/common/elf/elffilewidget.ui @@ -30,8 +30,154 @@ - General Informations + File Informations + + + + + Elf header + + + + + + Class: + + + + + + + none + + + + + + + Endianness: + + + + + + + none + + + + + + + Version: + + + + + + + Type: + + + + + + + Machine: + + + + + + + Entry point address: + + + + + + + none + + + + + + + none + + + + + + + none + + + + + + + none + + + + + + + OS/ABI: + + + + + + + none + + + + + + + + + + Sections + + + + + + Section count: + + + + + + + Sections begin address: + + + + + + + none + + + + + + + none + + + + + + + diff --git a/src/common/elf/elfparser.cpp b/src/common/elf/elfparser.cpp --- a/src/common/elf/elfparser.cpp +++ b/src/common/elf/elfparser.cpp @@ -321,6 +321,17 @@ int elfparser::closeFile() return 0; } +QString elfparser::getClass() +{ + if(this->e!=NULL) + { + int eclass = gelf_getclass(this->e); + if(eclass==ELFCLASS32)return "ELF32"; + if(eclass==ELFCLASS64)return "ELF64"; + } + return "none"; +} + bool elfparser::isopened() { @@ -374,6 +385,16 @@ QString elfparser::getType() return kind; } +QString elfparser::getEndianness() +{ + if(this->e!=NULL) + { + if(this->ehdr.e_ident[EI_DATA]==ELFDATA2LSB)return "2's complement, little endian"; + if(this->ehdr.e_ident[EI_DATA]==ELFDATA2MSB)return "2's complement, big endian"; + } + return "none"; +} + int32_t elfparser::getVersion() { diff --git a/src/common/elf/elfparser.h b/src/common/elf/elfparser.h --- a/src/common/elf/elfparser.h +++ b/src/common/elf/elfparser.h @@ -49,8 +49,10 @@ public: bool isopened(); int setFilename(const QString& name); int closeFile(); + QString getClass(); QString getArchitecture(); QString getType(); + QString getEndianness(); int32_t getVersion(); int getSectioncount(); int getSegmentcount(); @@ -82,7 +84,6 @@ private: Elf_Data * data; size_t SectionCount,SegmentCount, shstrndx; QList Segments; - //QList Sections; QList sections; };