int main(int argc, char *argv[]) { struct elf_data elf; int ret; printf("\n"); if (argc < 2) { printf("Please specify an ELF file on the command-line\n\n"); printf(" test \"elffile\"\n"); printf(" where \"elffile\" is the filename of the ELF file to investigate\n"); } elf.filename = argv[1]; elf.verbose = 1; ret = elf_load(&elf); if (ret) { switch(ret) { case ERR_ELF_FILE_OPEN: printf("File open failed\n"); break; case ERR_ELF_FILE_PREMATURE_EOF: printf("File open failed\n"); break; case ERR_ELF_FILE_READ: printf("File open failed\n"); break; case ERR_ELF_INCOMPATIBLE: printf("Incompatibke file\n"); break; case ERR_ELF_MEMORY_ALLOCATION: printf("Memory allocation error\n"); break; default: printf("Unknown error: %d\n", ret); break; } return(ret); } elf_print_header(&elf); elf_print_sections(&elf); return(0); }
int main(int argc, char** argv) { if (argc < 2) { fprintf(stderr, "no input elf specified\n"); return EXIT_FAILURE; } elf_t elf; int ret = elf_read(argv[1], &elf); if (ret != 0) { fprintf(stderr, "unable to parse elf: %d\n", ret); return EXIT_FAILURE; } elf_print_sections(&elf); elf_print_symbols(&elf); int symbol; uint64_t faddr; uint32_t* val; ret = elf_get_symbol_by_name(&elf, "SOME_GLOBAL", &symbol); if (ret != 0) { fprintf(stderr, "no such symbol 'SOME_GLOBAL'\n"); return EXIT_FAILURE; } ret = elf_get_symbol_faddr(&elf, symbol, &faddr); if (ret != 0) { fprintf(stderr, "unable to map symbol: %d\n", ret); return EXIT_FAILURE; } val = (uint32_t*)(elf.elf_data + faddr); printf("Value of SOME_GLOBAL: 0x%x\n", *val); elf_free(&elf); return EXIT_SUCCESS; }