[Toybox] [PATCH] Improve file(1)'s ELF support.

Ed Maste emaste at freebsd.org
Mon Jul 4 06:31:25 PDT 2016


On 2 July 2016 at 16:01, enh <enh at google.com> wrote:
> Read any PT_NOTE sections to look for NT_GNU_BUILD_ID or Android API
> level notes. I deliberately didn't NT_GNU_ABI_TAG because it's noisy --
> every Linux executable has one -- but not something most command-line
> users will have any use for. (And you can ask readelf(1) anyway.)

+          if (n_type == 3 /*NT_GNU_BUILD_ID*/) {
+            printf(", BuildID[%s]=", (n_descsz==20)?"sha1":"md5");
+            for (j = 0; j < n_descsz; ++j) printf("%02x", note[16 + j]);
+          }

There are build ID notes that are not 20 bytes long, and are not md5.
Specifically, a 16 byte build ID may be a UUID, LLVM's lld can
generate 8-byte fnv1, and the user may specify an arbitrary number of
hex bytes for build ID.

I have a patch for Zoulas file that does:

+               switch (descsz) {
+               case 8:
+                   type = "fnv1";
+                   break;
+               case 16:
+                   type = "md5/uuid";
+                   break;
+               case 20:
+                   type = "sha1";
+                   break;
+               default:
+                   type = "unknown";
+                   break;
+               }

but given that there's no requirement on exactly what's included in a
sha1 or md5 build ID anyway I'm not sure there's much value in
reporting the type.


More information about the Toybox mailing list