Hi,

On Mon, 2020-10-12 at 00:35 -0700, Panu Matilainen wrote:
> The problem here is that we're trying to classify a hermaphrodite
> entity into one of two sexes. ET_EXEC is clear, but ET_DYN can be
> either an executable, a dynamic shared library *or both*. Until we
> embrace this fact, we'll get it wrong half of the time. 
> 
> So we need to stop trying to decide what *it is* and instead ask it
> what it's *capable of*, and act accordingly.
> libmagic doesn't know nearly enough to handle this, so the logic
> needs to live inside elfdeps or we need to enhance the classifier
> somehow (wouldn't be a bad thing at all but perhaps out of scope
> here). Which means a split on the .attr level likely isn't going to
> be meaningful.
> 
> If we want to preserve the behavior where executables can disable
> dependency generation by stripping x, we need to come up with a new
> way of defining an executable. Given the nature of modern ELF, I
> think the only meaningful way is to draw the line at: regardless of
> it's possible other capabilities, does it do something if executed?
> Which AIUI in technical terms comes down to: does it have PT_INTERP?
> elfdeps looks that info up as it is, but it's not wired in a
> meaningful way at the moment.

That is indeed a tricky question to answer. Note that elfutils since
0.177 comes with a tool eu-elfclassify to answer precisely these
questions:
https://gnu.wildebeest.org/blog/mjw/2019/08/15/elfutils-0-177-released-with-eu-elfclassify/

You might want to use that or study the code to see how it determines
some of the corner cases. Specifically you may want to lookup
is_executable () and is_program (), is_library () and is_shared () for
some of the tricky corner cases:

  --executable   File is (primarily) an ELF program executable (not
                 primarily a DSO)
  --program      File is an ELF program executable (might also be a
                 DSO)

  --library      File is an ELF shared object (DSO) (might also be
                 an executable)
  --shared       File is (primarily) an ELF shared object (DSO)
                 (not primarily an executable)

Cheers,

Mark
_______________________________________________
Rpm-maint mailing list
Rpm-maint@lists.rpm.org
http://lists.rpm.org/mailman/listinfo/rpm-maint

Reply via email to