Files
RElicAnalysis/RElicAnalysis/fileinfo.cpp
T
2026-04-29 13:56:33 +02:00

84 lines
2.1 KiB
C++

#include "fileinfo.h"
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
FileInfo::FileInfo(QFile &file) {
QFileInfo info(file);
struct stat st_stat;
int fd;
int length;
if (!info.exists()){
return;
}
m_sizeFile = info.size();
m_path = info.absolutePath();
m_filename = info.fileName();
QString fullPath = m_path + "/" + m_filename;
m_rawData = NULL;
/* Get signature of the file */
//QByteArray b = file.readAll();
//m_rawData = b.data();
//m_rawData = (char *)malloc(m_sizeFile);
//qDebug() << "FOOO: " << b.size();
//memcpy(m_rawData, b.data(), b.size());
//m_rawData = b.constData();
//m_rawData = b.data();
//qDebug() << b[0] << b[1] << b[2] << b[3];
//QByteArray b1 = b + 1;
//qDebug() << b1[0] << b1[1] << b1[2] << b1[3];
/*QDataStream in(&file);
qint64 len = in.readRawData(m_rawData, m_sizeFile);
qDebug() << len;*/
/*
* I need to read the file in the old way, because with Qt functions, my buffer is corrupted
* i do not have the full data
*/
fd = open(fullPath.toLatin1().constData(), O_RDONLY);
if (fd < 0){
qDebug() << "Failed to read the file";
}
fstat(fd, &st_stat);
m_rawData = (char *)malloc(st_stat.st_size);
length = read(fd, m_rawData, st_stat.st_size);
close(fd);
this->_getSignature();
}
size_t FileInfo::getSizeFile(){
return m_sizeFile;
}
QString FileInfo::getFilename(){
return m_filename;
}
QString FileInfo::getPath(){
return m_path;
}
int FileInfo::getFileType(){
return m_fileType;
}
void FileInfo::_getSignature(){
// ELF file
/*char signature[4];
sprintf(signature, "%c%c%c%c", m_rawData[0], m_rawData[1], m_rawData[2], m_rawData[3]);
qDebug() << signature;*/
if (m_rawData[0] == 0x7f && m_rawData[1] == 0x45 && m_rawData[2] == 0x4c && m_rawData[3] == 0x46)
m_fileType = SIGNATURE_ELF;
else
m_fileType = SIGNATURE_UNKNOWN;
}
char *FileInfo::getRawData(){
return m_rawData;
}
FileInfo::~FileInfo(){
free(m_rawData);
}