sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #11845
Re: Fra dynamisk til statisk efter linkning til færdigt program.
On Thu, 12 Aug 1999, Mads Bondo Dydensborg wrote:
> ER der en måde at lave selve den binære gzip om til et statisk linket
> program? Jeg er klar over, at jeg kan hente sourcen til gzip og oversætte
> Eller er det fuldkommen sindsygt?
Næsten :) Dynamisk linkede programmer kræver et ekstra hop til de
funktioner der er i shared libraries, idet disse adresser er kun kendt når
programmet afvikles. Hop adresserne, og det er noget der styres af
linkeren vha. den information der ligger i object filerne.
Her er en dynamisk main (objdump -dS):
08048570 <main>:
8048570: 55 pushl %ebp
8048571: 89 e5 movl %esp,%ebp
return printf("hello world\n");
8048573: 68 cc 94 04 08 pushl $0x80494cc
8048578: e8 a7 fe ff ff call 8048424 <_init+0x44>
804857d: 83 c4 04 addl $0x4,%esp
8048580: 89 c2 movl %eax,%edx
8048582: 89 d0 movl %edx,%eax
8048584: eb 0a jmp 8048590 <main+0x20>
}
Her hoppes der til printf via et sted i programmet som bliver fixet med de
rigtige adresser når den dynamiske linker (altså den der kører på
runtime-tidspunktet) starter programmet.
Her er en statisk main:
08048190 <main>:
8048190: 55 pushl %ebp
8048191: 89 e5 movl %esp,%ebp
return printf("hello world\n");
8048193: 68 00 af 05 08 pushl $0x805af00
8048198: e8 43 13 00 00 call 80494e0 <_IO_printf>
804819d: 83 c4 04 addl $0x4,%esp
80481a0: 89 c2 movl %eax,%edx
80481a2: 89 d0 movl %edx,%eax
80481a4: eb 0a jmp 80481b0 <main+0x20>
}
her ligger det hele i een kode segment, så man ved hvilket adresse tingene
ligger på.
Bemærk også at adressen på strengen er anderldes i de to eksempler. Det er
også noget linkeren tager sig af på kompileringstidspunktet.
--
==============================================================================
Erwin Andreasen Herlev, Denmark <erw@xxxxxx> UNIX System Programmer
<URL:http://www.andreasen.org> <*> (not speaking for) DDE
==============================================================================
References