Binääri "lähde" koodiksi, haasteen kovuus?

On ollut assembler decompiler - ohjelmistoja, mutta kuvitellaanpa jotain paljon vaikeampaa: c decompiler, josta voinen käyttää nimitystä c käänteiskääntäjä. Keksikää parempi nimi.

Miten kova haaste tietojenkäsittelyteorialle ja ohjelmistotekniikalle tms. on tehdä ohjelmisto, joka kääntää käynnistettävää binääriä jollain tavalla ymmärrettäväksi c kieleksi?

Eli käänteiskääntäjän pitäisi koota konekieli sopivan kokoisiksi olioiksi ja luokiksi yms.

Rakenne on lähes takuulla eri kuin alkuperäisessä, ja nimet..., niin miten antaa kuvaavia nimiä muuttujille ym., miten yhdistää merkitykset kaikkeen? Se on sitten ihan oma taitonsa. Standardin (std) nimiavaruuden sanat voi asetella ilman varsinaista ymmärrystä, mutta ohjelmoijan keksimät ohjelmistokohtaiset merkitykset vaativat pähkäilyä.
3359
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

jo se että monilla korkean tason kielillä tehty
ohjelma voi binääritasolle käännöksen jälkeen
olla täsmälleen samanlainen.

Ja vaikka Decompilerille kerrottaisiinkin että
mille sorsakielelle yritetään tulkata niin
vaikeaa, vaikeaa on.
Useimmat kääntäjät vielä optimoivat koodia omilla
säännöillään ja laittavat omia alirutiineitaan
väliin niin että koodaajan aivoitukset menevät kyllä ihan uusiksi.

Äänestä

Mutta luulisin nykyisten decompilerien olevan pelkkiä mekaanisia kääntäjiä, enkä usko niillä olevan mitään varsinaisia päättelytaitoja. Perustuu kai siihen että jo kääntäjät tuottavat binäärikoodia yksinkertaisin menetelmin...?

Mutta olisi melkoinen saavutus jos jokin ohjelma käännettäisiin toimintansa perusteella oliokoodiksi. Esimerkkinä 3d-animaatio purettaisiin kappaleiksi, jotka olisi olioita.

Äänestä

"Eli käänteiskääntäjän pitäisi koota konekieli sopivan kokoisiksi olioiksi ja luokiksi yms.
"

Jospa sopivat oliot ja luokat muodostaisivat virtuaalikoneen, joka simuloisi sitä assemblerin suositusta yksi yhteen. Silloin decompilointi olisi triviaali tehtävä. Pitäisi vain tehdä siitä C -kielen syntaksin mukaisia kutsuja näiden luokkien metodeihin.

Tosin tuloksena olevaa ohjelmaa olisi tasan yhtä vaikea ymmärtää kuin sitä alkuperäistä konekieltä. Hyöty olisi siis nolla.

Ehkä haluat vähän tarketaan noita vaatimuksiasi...

Asiaan väljästi liittyen, koodia on joskus mahdollista generoida automaatisesti tiettyjen tietojen pohjalta:

http://lambda-the-ultimate.org/node/1178

Tämä ei onnistu ihan noin vain C :n kanssa kuitenkaan.

Äänestä

Kommentoi aloitusta


Kuutela T kirjoitti:

On ollut assembler decompiler - ohjelmistoja, mutta kuvitellaanpa jotain paljon vaikeampaa: c decompiler, josta voinen käyttää nimitystä c käänteiskääntäjä. Keksikää parempi nimi.

Miten kova haaste tietojenkäsittelyteorialle ja ohjelmistotekniikalle tms. on tehdä ohjelmisto, joka kääntää käynnistettävää binääriä jollain tavalla ymmärrettäväksi c kieleksi?

Eli käänteiskääntäjän pitäisi koota konekieli sopivan kokoisiksi olioiksi ja luokiksi yms.

Rakenne on lähes takuulla eri kuin alkuperäisessä, ja nimet..., niin miten antaa kuvaavia nimiä muuttujille ym., miten yhdistää merkitykset kaikkeen? Se on sitten ihan oma taitonsa. Standardin (std) nimiavaruuden sanat voi asetella ilman varsinaista ymmärrystä, mutta ohjelmoijan keksimät ohjelmistokohtaiset merkitykset vaativat pähkäilyä.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu