簡體   English   中英

我試圖在一行上打印 16 個十六進制值

[英]I'm trying to print 16 hexadecimal values on one line

我有一個程序,它接受命令行參數和一個 elf 文件的路徑,並使用結構顯示它們的內容。 elf 頭文件設置為 16 個字節。 在這些字節中,每兩個字節描述有關標題的其他內容(版本、入口點等),最后四個字節包含一個幻數,告訴您這是文件的結尾。 字節都是十六進制的。

bool read_header (FILE *file, elf_hdr_t *hdr)
{
    if (hdr != NULL && file != NULL && fread(hdr, sizeof(*hdr), 1, file) == 1)
    {
      fread(hdr, sizeof(*hdr), 1, file);
      if (hdr->magic == 0x00464C45)
      {
        return true;
      }
    }
    return false;
}

我應該以 %x 十六進制格式在同一行上打印出結構中的每一位

這是我將值存儲到的結構。

typedef struct __attribute__((__packed__)) elf {
    uint16_t e_version;     /* version should be 1 */
    uint16_t e_entry;       /* entry point of program */
    uint16_t e_phdr_start;  /* start of program headers */
    uint16_t e_num_phdr;    /* number of program headers */
    uint16_t e_symtab;      /* start of symbol table */
    uint16_t e_strtab;      /* start of string table */
    uint32_t magic;         /* ELF */
} elf_hdr_t;

有人告訴我可以使用 for 循環,但我不知道如何使用。 你怎么建議我這樣做?

我需要使用以下方法

void dump_header (elf_hdr_t hdr)
{

}

我應該以 %x 十六進制格式在同一行上打印出結構中的每一位

閱讀標題一次后

bool read_header (FILE *file, elf_hdr_t *hdr) {
  if (hdr != NULL && file != NULL && fread(hdr, sizeof(*hdr), 1, file) == 1) {
    // comment out next line
    // fread(hdr, sizeof(*hdr), 1, file);
    if (hdr->magic == 0x00464C45) {
      return true;
    }
  }
  return false;
}

...打印其字節內容。 hdr地址轉換為unsigned char *

void dump_header(elf_hdr_t hdr) {
  bool success = read_header(file, &hdr);
  printf("Success %d\n", success);
  for (size+t i = 0; i < sizeof hdr; i++) {
    printf("%x ", ((unsigned char *)&hdr)[i]);
  }
  printf("\n");
}

elf_hdr_t *是更常見的 C 方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM