Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/arch/mips/tools/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  elf-entry.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
#include <byteswap.h>
#include <elf.h>
#include <endian.h>
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef be32toh
/* If libc provides [bl]e{32,64}toh() then we'll use them */
#elif BYTE_ORDER == LITTLE_ENDIAN
define be32toh(x) bswap_32(x)
define le32toh(x) (x)
define be64toh(x) bswap_64(x)
define le64toh(x) (x)
#elif BYTE_ORDER == BIG_ENDIAN
define be32toh(x) (x)
define le32toh(x) bswap_32(x)
define be64toh(x) (x)
define le64toh(x) bswap_64(x)
#endif

__attribute__((noreturn))
static void die(const char *msg)
{
 fputs(msg, stderr);
 exit(EXIT_FAILURE);
}

int main(int argc, const char *argv[])
{
 uint64_t entry;
 size_t nread;
 FILE *file;
 union {
  Elf32_Ehdr ehdr32;
  Elf64_Ehdr ehdr64;
 } hdr;

 if (argc != 2)
  die("Usage: elf-entry \n");

 file = fopen(argv[1], "r");
 if (!file) {
  perror("Unable to open input file");
  return EXIT_FAILURE;
 }

 nread = fread(&hdr, 1, sizeof(hdr), file);
 if (nread != sizeof(hdr)) {
  perror("Unable to read input file");
  fclose(file);
  return EXIT_FAILURE;
 }

 if (memcmp(hdr.ehdr32.e_ident, ELFMAG, SELFMAG)) {
  fclose(file);
  die("Input is not an ELF\n");
 }

 switch (hdr.ehdr32.e_ident[EI_CLASS]) {
 case ELFCLASS32:
  switch (hdr.ehdr32.e_ident[EI_DATA]) {
  case ELFDATA2LSB:
   entry = le32toh(hdr.ehdr32.e_entry);
   break;
  case ELFDATA2MSB:
   entry = be32toh(hdr.ehdr32.e_entry);
   break;
  default:
   fclose(file);
   die("Invalid ELF encoding\n");
  }

  /* Sign extend to form a canonical address */
  entry = (int64_t)(int32_t)entry;
  break;

 case ELFCLASS64:
  switch (hdr.ehdr32.e_ident[EI_DATA]) {
  case ELFDATA2LSB:
   entry = le64toh(hdr.ehdr64.e_entry);
   break;
  case ELFDATA2MSB:
   entry = be64toh(hdr.ehdr64.e_entry);
   break;
  default:
   fclose(file);
   die("Invalid ELF encoding\n");
  }
  break;

 default:
  fclose(file);
  die("Invalid ELF class\n");
 }

 printf("0x%016" PRIx64 "\n", entry);
 fclose(file);
 return EXIT_SUCCESS;
}

Messung V0.5
C=98 H=100 G=98

¤ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.