Running SO files
Segher Boessenkool
segher@kernel.crashing.org
Sun Jun 1 15:46:00 GMT 2008
More information about the Binutils mailing list
Sun Jun 1 15:46:00 GMT 2008
- Previous message (by thread): Running SO files
- Next message (by thread): Running SO files
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
>>> 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
- Previous message (by thread): Running SO files
- Next message (by thread): Running SO files
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list