Kérdés:
A Linux futtatható futtatása 32 bites és 64 bites között
Mellowcandle
2013-04-10 12:50:29 UTC
view on stackexchange narkive permalink

Ahogy elképzelheted, a forráskód nem érhető el. A futtatható fájl a C / C ++ használatával készült, és a gcc használatával lett összeállítva.

Ez az a fájl a kód> mondanivaló a fájlról

  ELF 32 bites LSB futtatható, Intel 80386, 1. verzió (SYSV), dinamikusan összekapcsolt (megosztott libeket használ), GNU / Linux 2.6.24 esetén nincs lecsupaszítva  

Az ldd szerint ezeket a könyvtárakat használja a program:

  libssl.so.1.0.0 = > /lib/i386-linux-gnu/libssl.so.1.0.0 (0xf7700000) libcrypto.so.1.0.0 = > /lib/i386-linux-gnu/libcrypto.so.1.0.0 (0xf7554000) libm .so.6 = > /lib/i386-linux-gnu/libm.so.6 (0xf7528000) libc.so.6 = > /lib/i386-linux-gnu/libc.so.6 (0xf737e000) libpthread.so .0 = > /lib/i386-linux-gnu/libpthread.so.0 (0xf7363000) librt.so.1 = > /lib/i386-linux-gnu/librt.so.1 (0xf7359000) libstdc ++. = > /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf7270000) li bdl.so.2 = > /lib/i386-linux-gnu/libdl.so.2 (0xf726b000) libz.so.1 = > /lib/i386-linux-gnu/libz.so.1 (0xf7252000) / lib /ld-linux.so.2 (0xf7789000) libgcc_s.so.1 = > /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7234000)  

Mindezek a könyvtárak 64 bites verzióban is elérhető.

A kérdések:

  1. Lehetséges-e összerakni az alkalmazást 64 bites alkalmazásként?
  2. Milyen eszközök állnak rendelkezésre a ilyet ? (ha lehetséges)
Kettő válaszokat:
Ange
2013-04-10 12:59:08 UTC
view on stackexchange narkive permalink

Még ha nem is ez a kérdés, mivel valóban nehéz lenne ténylegesen összerakni, remélem, hogy kipróbálhat valami mást is, mint az újraszerelés, vagy hogy ez legalább egy kicsi és nem homályos fájl.

alacsony szint

Az újbóli összerakás nagyon bonyolult lenne:

Eszközök : Nem tudok konkrét eszközt kitalálni , túl az IDA-n és a normál fordított mérnöki módszereken (hasonló kérést kapok a DOS / NE fájlok PE-hez való portjához)

Hívási konvenciók : A 32b és 64b közötti portálás nehéz lesz, mivel a konvenciók hívása különböznek, ezért összeállítás szintjén át kell írni őket. Legalábbis az ELF struktúrái nagyon hasonlóak.

magas szintű

A legjobb megoldás az, ha megpróbálja dekompilálni a Hex-Rays Decompiler segítségével a szóváltás mentése érdekében, de még mindig sok fárasztó munkát igényel, mielőtt a lefordított kód a várt módon működhetne.

Mit értesz azon, hogy „a hívási konvenciók különböznek”. Azt hittem, hogy ez végül az operációs rendszer / futtatható formátum parancsára történt?
[a függvényparaméterek átadása a regiszterekben és nem a veremben] (http://stackoverflow.com/questions/5022744/x64-bit-assembly)
Úgy látom, bizonyos exek esetében még mindig nem ugyanaz? Úgy gondolom, hogy két elem általában átkerül a regiszterekbe, a többi pedig a veremben van a Windows "standard" hívási konvenciójában? Miért különböznek (a regisztráció méretén kívül) ezek a hívási konvenciók?
(exe, mint a PE-ben, igaz?) [ezt] (https://code.google.com/p/corkami/wiki/CallingConventions) emlékeztetőül írtam a PE hívási konvenciókra.
Úgy látom, azt hittem, hogy a Microsoft "Standard" -nak hívta, most már tudom, hogy FastCall-nak hívják - Te és corkami egyébként fantasztikusan csapkodunk. Mondom mindenkinek, akivel találkozom, aki hallgat rátok, srácok.
@angealbertini:, de nem használhatnád csak az oldstyle hívási konvenciókat az új 64b futtatható fájlodban?
Lehetne - technikailag szólva -, de a szabványos fordítók nem generálnak kompatibilis kódot, így nem tudná egyszerűen használni a könyvtárakat.
A mutató méretének változása az a bit, ami megijeszt ... minden indexnek egy struktúrába vagy veremkeretbe tudnia kell, hogy van-e olyan mutató, amely méretet változtatott a memóriában. Valószínűleg szüksége lenne valami majdnem olyan erősre, mint egy dekompilátor. A hívó egyezmény témájában konvertálni kell őket, bárhol is használják a könyvtár függvényeit, bár technikailag előfordulhat, hogy helyettük csomagolókat írhat.
0xC0000022L
2013-04-12 19:39:41 UTC
view on stackexchange narkive permalink

Itt az a kérdés, hogy mire van szükséged? Szüksége van arra, hogy futtassa ezt a dolgot 64 bites rendszeren, és kölcsönhatásba lépjen vele, vagy a célja a tényleges portolás ?

Futtassa

Ha Önnek csak futtatnia kellett, és feltételezhetjük, hogy a kompatibilitási könyvtárak (amelyek lehetővé teszik a 32 bites programok futtatását 64 biten) adott esetben, akkor valószínűleg mindenféle funkcionalitást el lehet hárítani a szabványos ld.so használatával. metódusok ( LD_PRELOAD és barátai), amint azt a Hogyan adhatok funkcionalitást egy meglévő bináris futtatható fájlhoz? válaszokban is ismertetünk ott kapcsolódhat a meglévő és változatlan 32 bites programhoz memória-leképezett fájlok vagy foglalatok, vagy bármilyen olyan IPC-mechanizmus segítségével, amelyet megfelelőnek tart a célra.

Ez őszintén szólva valószínű a legjobb módszer a legkevesebb erőfeszítéssel.

A Debian 5-en a kompatibilitási réteg a következő két csomagban található:

  libc6-dev-i386 - Beágyazott GNU C Könyvtár: 32 bites fejlesztési könyvtárak AMD64libc6-i386 esetén - Beágyazott GNU C könyvtár: 32 bites megosztott könyvtárak az AMD64 számára  

Ugyanezt a nevet használják az Ubuntu 10.04 és 12.04 között. Ezeket az egyetlen verziókat tudtam ellenőrizni jelenleg, de tudok hasonló dolgokról az RHEL / CentOS / ScientificLinux alatt.

Portálja

Ellenkező esetben belefutna egy rengeteg probléma, amelyek közül a legnagyobbakat ange albertini itt már felvázolta.

Általánosságban elmondható, hogy ha szerencséd van és így néz ki, a hibakeresési információkat ( nincs lecsupaszítva mondja) lehetővé teszi a forrásfájlok nevének rendezését, így lehet, hogy összerakhatja a puzzle darabokat, például a könyvtárakat, és ezután a "tényleges" kódra koncentrálhat. Ez nem biztos, hogy nagy előny, de a fordított mérnök számára minden aprócsepp segít

Az olyan dekompilátorok, mint a Hex-Rays plugin vagy a Hopperhez mellékelt, jó módszer lehet a kód magas szintű elképzelésének megszerzésére. Ennek ellenére ez sok munka lesz, hacsak nem a funkcionális részekre összpontosítasz, amelyekre szükséged van - ezért én (lusta és minden) mindig a fenti opcióval élek, vagyis kompatibilis módban futtatom.



Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 3.0 licencért, amely alatt terjesztik.
Loading...