This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Running SO files


I have noticed that some shared object (.so) files can be executed. For
example, I can type:


$ /lib/libc.so.6

which prints a message with the version of GNU C library and other
information. How does this work? How is it possible to execute a shared
object file?

It's a little hack in the Linux kernel.

no it isnt ... it's standard ELF

The ELF standard (v1.2, is it different in newer versions? Is there a newer version?) says:

	PT_INTERP
	The array element specifies the location and size of a null-terminated
	path name to invoke as an interpreter. This segment type is meaningful
	only for executable files (though it may occur for shared objects).

so using interp meaningfully in a shared object is "a little hack" in my
opinion.  Feel free to disagree.

It may be possible to create a shared object that is an executable as well,
without using interp, but I've never seen this done.


and a ".interp" section.

no ... an .interp is only needed if the ELF itself is not capable of direct
execution.

But can that be done? Seems hard to me, esp. if you want it to work on more than one architecture.

and the kernel doesnt parse the section headers looking
for ".interp", it parses the dynamic table for DT_INTERP.

Actually, it looks for PT_INTERP in the program headers.


I have also noticed that this is not true
for every SO file. I would appreciate any information on how this
works.

You can't "run" a SO if it's not marked +x. The Linux kernel will happily try to run any SO that is executable, but will segfault it just as happily unless you get all the little bits right.

generally speaking, a SO wouldnt be usable anyways if it werent +x.

Strange, on a debian system only libc.so is +x, other SOs are not (well, ld.so is). Dunno, maybe debian is strange.


Segher



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]