Portál AbcLinuxu, 11. května 2025 09:51

Dotaz: Implementace dynamického linkování v AMD64

20.10.2005 11:49 zde | skóre: 9 | blog: Linuch | Brno
Implementace dynamického linkování v AMD64
Přečteno: 58×
Odpovědět | Admin
Prosím, provozujete někdo 64-bitový linux na AMD64? Byli byste tak milí, a nativně přeložili kousek kódu (jde o jednoduchý benchmark, žádný expolit) z uvedeného linku, spustili a.out a postnuli sem výsledky? objdisasm -d a.out by se taky hodil. Já nemám momentálně k žádnému 64-bit Linuxovému stroji přístup. Mnohokrát děkuji.

Odkaz na kód zde
Táto, ty de byl? V práci, já debil.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.10.2005 13:49 Tom K | skóre: 22
Rozbalit Rozbalit vše Re: Implementace dynamického linkování v AMD64
Odpovědět | | Sbalit | Link | Blokovat | Admin
athlon64@2800
dummy at 0x400738: ff 25 b2 06 10 00 68 06 00 00
dummy(): 849
dummy(): 23
dummy(): 23
dummy(): 23
dummy(): 23
dummy(): 23
dummy(): 23
dummy(): 23
dummy(): 23
dummy(): 23
dummy_ptr at 0x2aaaaabc261c: f3 c3 90 90 55 48 89 e5 53 48
dummy_ptr(): 25
dummy_ptr(): 20
dummy_ptr(): 20
dummy_ptr(): 20
dummy_ptr(): 20
dummy_ptr(): 20
dummy_ptr(): 20
dummy_ptr(): 20
dummy_ptr(): 20
dummy_ptr(): 20
echo -n "u48" | sha1sum | head -c3; echo
20.10.2005 14:40 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: Implementace dynamického linkování v AMD64
Aha, takže PLT obsahuje opět stejný nepřímý skok (FF 25), a režie volání dynamicky linkované funkce je stále 3 takty. Tomu "F3 C3" nerozumím. C3 je normální instrukce return, ale co tam proboha dělá ten prefix F3?
Táto, ty de byl? V práci, já debil.
20.10.2005 13:53 Tom K | skóre: 22
Rozbalit Rozbalit vše Re: Implementace dynamického linkování v AMD64
Odpovědět | | Sbalit | Link | Blokovat | Admin
athlon64@2800
kompilovano s -O3 (zajimave ne ?) -O2 vypada stejne, jako -O0
dummy at 0x400738: ff 25 22 07 10 00 68 06 00 00
dummy(): 850
dummy(): 23
dummy(): 9
dummy(): 9
dummy(): 9
dummy(): 9
dummy(): 9
dummy(): 9
dummy(): 9
dummy(): 9
dummy_ptr at 0x2aaaaabc2620: f3 c3 90 90 90 90 90 90 90 90
dummy_ptr(): 24
dummy_ptr(): 9
dummy_ptr(): 9
dummy_ptr(): 9
dummy_ptr(): 9
dummy_ptr(): 9
dummy_ptr(): 9
dummy_ptr(): 9
dummy_ptr(): 9
dummy_ptr(): 9
echo -n "u48" | sha1sum | head -c3; echo
20.10.2005 15:01 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: Implementace dynamického linkování v AMD64
Jo, to je zajimavy. Ja kdyz to zkompiluju pro i386 s -O3, tak se samotnej měřenej kód vůbec nezmění, tj volání přes PLT a přes pointer je stále:
 80486d0:       0f 31                   rdtsc  
 80486d2:       89 c3                   mov    %eax,%ebx
 80486d4:       e8 43 fe ff ff          call   804851c <dummy@plt>
 80486d9:       0f 31                   rdtsc  
 ... a ...
 8048780:       0f 31                   rdtsc  
 8048782:       89 c3                   mov    %eax,%ebx
 8048784:       ff d7                   call   *%edi
 8048786:       0f 31                   rdtsc  
..ale výsledek se mění při každém spuštění. Nejdřív je PLT překvapivě o 9 taktů rychlejší, pak zase o 2 taky pomalejší. Adresa PLT i jeho obsah je stále stejný, jediné co se mění je adresa, kam Linuks načetl dynamickou knihovnu. Asi se nějak projevuje aliasing cache, nebo nějaká podobná magie... Neoptimalizovaná verze se ale z nějakého neznámého důvodu chová stále stejně.
# run 1
dummy at 0x804851c: ff 25 78 9a 04 08 68 30 00 00
dummy(): 37
dummy_ptr at 0xb7f4d4bc: c3 90 90 90 55 89 e5 56 53 e8
dummy_ptr(): 46
# run 2
dummy at 0x804851c: ff 25 78 9a 04 08 68 30 00 00
dummy(): 37
dummy_ptr at 0xb7f044bc: c3 90 90 90 55 89 e5 56 53 e8
dummy_ptr(): 35
Táto, ty de byl? V práci, já debil.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.