[英]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.