int main(int argc, char **argv) { ssize_t ret; int fd; if (argc != 2) { fprintf(stderr, "usage: %s <kernel core file>\n", argv[0]); return 1; } fname = argv[1]; fd = open(fname, O_RDONLY); if (fd < 0) { fprintf(stderr, "Cannot open %s: %s\n", fname, strerror(errno)); return 2; } ret = pread(fd, ehdr.e_ident, EI_NIDENT, 0); if (ret != EI_NIDENT) { fprintf(stderr, "Read of e_ident from %s failed: %s\n", fname, strerror(errno)); return 3; } if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG) != 0) { fprintf(stderr, "Missing elf signature\n"); return 4; } if (ehdr.e_ident[EI_VERSION] != EV_CURRENT) { fprintf(stderr, "Bad elf version\n"); return 5; } if ((ehdr.e_ident[EI_CLASS] != ELFCLASS32) && (ehdr.e_ident[EI_CLASS] != ELFCLASS64)) { fprintf(stderr, "Unknown elf class %u\n", ehdr.e_ident[EI_CLASS]); return 6; } if ((ehdr.e_ident[EI_DATA] != ELFDATA2LSB) && (ehdr.e_ident[EI_DATA] != ELFDATA2MSB)) { fprintf(stderr, "Unkown elf data order %u\n", ehdr.e_ident[EI_DATA]); return 7; } if (ehdr.e_ident[EI_CLASS] == ELFCLASS32) read_elf32(fd); else read_elf64(fd); scan_note_headers(fd); dump_dmesg(fd); close(fd); return 0; }
// return 0 if error // return 0 if this is not an appimgage2 file long unsigned int appimage2_size(const char *fname) { ssize_t ret; int fd; long unsigned int size = 0; fd = open(fname, O_RDONLY); if (fd < 0) return 0; ret = pread(fd, ehdr.e_ident, EI_NIDENT, 0); if (ret != EI_NIDENT) goto getout; if ((ehdr.e_ident[EI_DATA] != ELFDATA2LSB) && (ehdr.e_ident[EI_DATA] != ELFDATA2MSB)) goto getout; if(ehdr.e_ident[EI_CLASS] == ELFCLASS32) { size = read_elf32(fd); } else if(ehdr.e_ident[EI_CLASS] == ELFCLASS64) { size = read_elf64(fd); } else { goto getout; } if (size == 0) goto getout; // look for a LZMA header at this location unsigned char buf[4]; ret = pread(fd, buf, 4, size); if (ret != 4) { size = 0; goto getout; } if (memcmp(buf, "hsqs", 4) != 0) size = 0; getout: close(fd); return size; }