commit ab1aa62f96d477d4ba584eef7bfd436d63767be6
parent d90e6fd689d42cd8b519650687db9cea5c0c3d0c
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Mon, 27 Nov 2017 20:08:33 +0100
[objdump] Add printsections()
This function prints all the sections of the file.
Diffstat:
1 file changed, 32 insertions(+), 1 deletion(-)
diff --git a/objdump/main.c b/objdump/main.c
@@ -68,6 +68,33 @@ printstrings(struct myrohdr *hdr)
}
}
+static int
+printsections(struct myrohdr *hdr, FILE *fp)
+{
+ size_t n, i;
+ struct myrosect sect;
+
+ puts("sections:");
+ n = hdr->secsize / MYROSECT_SIZ;
+ for (i = 0; i < n; ++i) {
+ if (rdmyrosec(fp, §) < 0)
+ return -1;
+ printf("\tname: %lu (\"%s\")\n"
+ "\tflags: %x\n"
+ "\tfill: %x\n"
+ "\taligment: %u\n"
+ "\toffset: %llu\n"
+ "\tlength: %llu\n\n",
+ sect.name, getstring(sect.name),
+ sect.flags,
+ sect.fill,
+ sect.aligment,
+ sect.offset,
+ sect.len);
+ }
+ return 0;
+}
+
int
main(int argc, char *argv[])
{
@@ -84,8 +111,10 @@ main(int argc, char *argv[])
goto wrong_file;
if (rdmyrohdr(fp, &hdr) < 0)
goto wrong_file;
- if (hdr.strsize > SIZE_MAX)
+ if (hdr.strsize > SIZE_MAX ||
+ hdr.secsize > SIZE_MAX / MYROSECT_SIZ) {
goto overflow;
+ }
strsiz = hdr.strsize;
if (strsiz > 0) {
@@ -97,6 +126,8 @@ main(int argc, char *argv[])
printhdr(&hdr);
printstrings(&hdr);
+ if (printsections(&hdr, fp) < 0)
+ goto wrong_file;
goto close_file;