

EDIT: It does work. My (GNU) libc spits out version info when executed as an executable.
How does that work? There must be something above ld.so
, maybe the OS? Because looking at the ELF header, ld.so
is a shared library “Type: DYN (Shared object file)”
$ readelf -hl ld.so
ELF Header:
Magic: 7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - GNU
ABI Version: 0
Type: DYN (Shared object file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x1d780
Start of program headers: 64 (bytes into file)
Start of section headers: 256264 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 11
Size of section headers: 64 (bytes)
Number of section headers: 23
Section header string table index: 22
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000db8 0x0000000000000db8 R 0x1000
LOAD 0x0000000000001000 0x0000000000001000 0x0000000000001000
0x0000000000029435 0x0000000000029435 R E 0x1000
LOAD 0x000000000002b000 0x000000000002b000 0x000000000002b000
0x000000000000a8c0 0x000000000000a8c0 R 0x1000
LOAD 0x00000000000362e0 0x00000000000362e0 0x00000000000362e0
0x0000000000002e24 0x0000000000003000 RW 0x1000
DYNAMIC 0x0000000000037e80 0x0000000000037e80 0x0000000000037e80
0x0000000000000180 0x0000000000000180 RW 0x8
NOTE 0x00000000000002a8 0x00000000000002a8 0x00000000000002a8
0x0000000000000040 0x0000000000000040 R 0x8
NOTE 0x00000000000002e8 0x00000000000002e8 0x00000000000002e8
0x0000000000000024 0x0000000000000024 R 0x4
GNU_PROPERTY 0x00000000000002a8 0x00000000000002a8 0x00000000000002a8
0x0000000000000040 0x0000000000000040 R 0x8
GNU_EH_FRAME 0x0000000000031718 0x0000000000031718 0x0000000000031718
0x00000000000009b4 0x00000000000009b4 R 0x4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 0x10
GNU_RELRO 0x00000000000362e0 0x00000000000362e0 0x00000000000362e0
0x0000000000001d20 0x0000000000001d20 R 0x1
The program headers don’t have interpreter information either. Compare that to ls
“Type: EXEC (Executable file)”.
$ readelf -hl ls
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x40b6e0
Start of program headers: 64 (bytes into file)
Start of section headers: 1473672 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 14
Size of section headers: 64 (bytes)
Number of section headers: 32
Section header string table index: 31
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
PHDR 0x0000000000000040 0x0000000000400040 0x0000000000400040
0x0000000000000310 0x0000000000000310 R 0x8
INTERP 0x00000000000003b4 0x00000000004003b4 0x00000000004003b4
0x0000000000000053 0x0000000000000053 R 0x1
LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
0x0000000000007570 0x0000000000007570 R 0x1000
LOAD 0x0000000000008000 0x0000000000408000 0x0000000000408000
0x00000000000decb1 0x00000000000decb1 R E 0x1000
LOAD 0x00000000000e7000 0x00000000004e7000 0x00000000004e7000
0x00000000000553a0 0x00000000000553a0 R 0x1000
LOAD 0x000000000013c9c8 0x000000000053d9c8 0x000000000053d9c8
0x000000000000d01c 0x0000000000024748 RW 0x1000
DYNAMIC 0x0000000000148080 0x0000000000549080 0x0000000000549080
0x0000000000000250 0x0000000000000250 RW 0x8
NOTE 0x0000000000000350 0x0000000000400350 0x0000000000400350
0x0000000000000040 0x0000000000000040 R 0x8
NOTE 0x0000000000000390 0x0000000000400390 0x0000000000400390
0x0000000000000024 0x0000000000000024 R 0x4
NOTE 0x000000000013c380 0x000000000053c380 0x000000000053c380
0x0000000000000020 0x0000000000000020 R 0x4
GNU_PROPERTY 0x0000000000000350 0x0000000000400350 0x0000000000400350
0x0000000000000040 0x0000000000000040 R 0x8
GNU_EH_FRAME 0x0000000000126318 0x0000000000526318 0x0000000000526318
0x0000000000002eb4 0x0000000000002eb4 R 0x4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 0x10
GNU_RELRO 0x000000000013c9c8 0x000000000053d9c8 0x000000000053d9c8
0x000000000000c638 0x000000000000c638 R 0x1
It feels like somewhere in the flow there is the same thing that’s happening in python just more hidden. Python seems to expose it because a file can be a library and an executable at the same time.
Anything built on top of atproto I tend to distrust. Doesn’t it all hinge upon the makers of bluesky hosting their central node for it to work?
Anti Commercial-AI license