Küsimus:
Impordi imelikke märke sisaldavaid sümboleid
Thanh Bui
2018-06-29 09:57:59 UTC
view on stackexchange narkive permalink

Analüüsin MacOS-i rakendust radare2-ga ja rakendus sõltub mitmest Qt-raamistikust. Kui printisin välja rakenduse peamise käivitatava faili impordisümbolid, on raamistike funktsioonide nimedes kummalised tähemärgid.

Näiteks kui raamistik ekspordib funktsiooni nime: QLocalServer :: listen (QStringconst&) , muutub see peaosas _sym.imp._ZN12QLocalServer6listenERK7QString käivitatava faili import.

Teine näide: QNetworkProxyFactory :: setUseSystemConfiguration (bool) saab sym.imp._ZN20QNetworkProxyFactory25setUseSystemConfigurationEb

Kas keegi oskab selgitada miks neid tegelasi on? Ma ei näe neid märke raamistike ekspordifunktsioonide analüüsimisel.

üks vastus:
Megabeets
2018-06-29 11:28:16 UTC
view on stackexchange narkive permalink

Need "imelikud" nimed on koostaja toodetud ja neid nimetatakse nimede segamiseks või nimede kaunistamiseks. Neid nimesid kuvab radare2, kuid neid ei toodeta ega genereerita.

Tsiteerides MSDN-ist:

Funktsioonid, andmed ja objektid C ja C ++ programmides on sisemiselt esindatud nende kaunistatud nimedega. Kaunistatud nimi on kodeeritud string, mille kompilaator on loonud objekti, andmete või funktsiooni määratluse koostamisel. See salvestab koos nimega helistamiskonventsioonid, tüübid, funktsiooniparameetrid ja muu teabe. See nimekaunistus, mida nimetatakse ka nimede segamiseks, aitab linkeril leida käivitatava faili linkimisel õiged funktsioonid ja objektid.

Vikipeedia artiklis Nimi segamine on mõned suurepärased näited nimega GCC toodetud C ++ segamine. Teema paremaks mõistmiseks soovitan teil see põhjalikult läbi lugeda. See selgitab, kuidas segased nimed toodetakse, ja kirjeldab selle ülesehitust.


radare2, täpselt nagu paljud erinevad lahtivõtjad, teab erinevaid nimesid de lahti harutada. Nime haldamist haldab mitu konfiguratsioonimuutujat:

  asm.demangle: kuvatakse demasleeritud sümbolid jaotises disasmbin.demangle: Imporditakse demobleeritud sümbolid rakendusest RBinbin.demanglecmd: käivitage xcrun swift-demangle ja sarnased, kui need on saadaval ( Aeglane) bin.lang: bin.demangle  

keel >. Öelge radare2-le kindlasti, et laaditaks lahti moondatud sümbolid. Seda saate teha, määrates e bin.demangle väärtuseks true. Võib-olla peate binaarse uuesti laadima - selleks kasutage oo .

Kui soovite lihtsalt konkreetset nime lahti muukida, võite kasutada iD <lang> <name> , mis muudab konkreetse keele sümboli nime lahti. Kasutage seda lihtsalt järgmiselt: iD cxx <mangled name> C ++ nime segamise jaoks.

The strangest thing is that its entire purpose is exactly the opposite of what OP is (bluntly) assuming: it is because all those "strange" characters that appear in the *original* declarations ('`(`, `)`, `:`, `&`, `~`) are not allowed in linker symbols.
Täname Megabeetsit väga detailse vastuse eest! See toimis. Tahaksin lihtsalt märkida, et demangling ei tööta impordisümbolitega (s.t käsu `ii` tulemused)


See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 4.0-litsentsi eest, mille all seda levitatakse.
Loading...