URL
https://opencores.org/ocsvn/fwrisc/fwrisc/trunk
Subversion Repositories fwrisc
[/] [fwrisc/] [trunk/] [ve/] [fwrisc/] [tests/] [ElfFileReader.cpp] - Rev 2
Compare with Previous | Blame | View Log
/* * ElfFileReader.cpp * * Copyright 2018 Matthew Ballance * * Licensed under the Apache License, Version 2.0 (the * "License"); you may not use this file except in * compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in * writing, software distributed under the License is * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See * the License for the specific language governing * permissions and limitations under the License. * * Created on: Nov 17, 2018 * Author: ballance */ #include "ElfFileReader.h" #include <stdio.h> #include <elf.h> ElfFileReader::ElfFileReader() { m_fp = 0; } ElfFileReader::~ElfFileReader() { // TODO Auto-generated destructor stub } bool ElfFileReader::read(const std::string &path) { Elf32_Phdr phdr; Elf32_Shdr shdr; m_fp = fopen(path.c_str(), "rb"); if (!m_fp) { fprintf(stdout, "Error: failed to open file %s\n", path.c_str()); return false; } fread(&m_hdr, sizeof(Elf32_Ehdr), 1, m_fp); for (uint32_t i=0; i<m_hdr.e_shnum; i++) { read(m_hdr.e_shoff+m_hdr.e_shentsize*i, &shdr, sizeof(Elf32_Shdr)); visit_shdr(shdr); } fclose(m_fp); m_fp = 0; return true; } void ElfFileReader::read(uint32_t off, void *dst, uint32_t sz) { fseek(m_fp, off, 0); fread(dst, sz, 1, m_fp); }