Kokeile m itä tapahtuu jos laitat koodiribiin

Anonyymi

_asm { pop EEIP

5

1030

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      Marinkos se siellä taas kirjoittelee?

    • Anonyymi

      Intel prosessori 10-sarjasta ylöspäin tulostaa, "poppia ee iliman pillua"

      • Anonyymi

        Heh, onko tää niinku niitä kun laskimeen kirjoittaa 1027/20000 ja kääntää ylösalaisin.


    • Anonyymi

      Jos haluatte kokeilla jotain hyödyllistä, kuten tekstin kaappaamista kuvasta, tai ihan mistä vaan ruudulla näkyvästä, niin kannattaa tutustua tähän työkaluun, se tosiaankin toimii. Kuten ohjeissa sanotaan, ohjelman tavoittavuus on parhaimillaan pikanäppäimen takana. Itse valjastin tehtävään Shift Ctrl Print

      Huom: Print => Prt Scr näppäin.

      https://github.com/ianzhao05/textshot

      Onnistumisia!

    • Anonyymi

      kummaa pelleilyä !

      1. rekisterin oikea nimi on EIP (32-bit) tai RIP (64-bit), ei siis EEIP.

      2. tuota rekisteriä EI VOI POPata, joskin täsmälleen saman vaikutuksen saa aikaiseksi RET -käskyllä.

      assemblyn sotkemisesta korkean tason kielen osaksi:

      Miksi valitsit C -kielen?

      C -kielessä ei voi edes sotkea C -koodin sekaan opettelematta ensin monimutkaisia sääntöjä, jotka tunnetaan nimellä "constraints".

      Olisit valinnut Delphin, sillä Delphissä säännöt siitä, mitä CPU rekistereitä saa käyttää ja miten, ovat selkeitä ja yksinkertaisia, eivätkä vaadin jonkun ihme "constraints" -sääntöjen huolellista opiskelua.

      Jos oletetaan, että 32-bittisessä ohjelmassa kaikki parametrit ovat 32 -bittisiä, niin Delphissä asia on näin yksinkertainen:

      function LaskeYhteen(Eka, Toka, Kolmas : Longword):Int64;
      asm
      // Input -Rekisterien arvot: EAX=Eka ; EDX = Toka ; ECX = Kolmas
      // Funktion 64-bittinen paluuarvo tulee asettaa rekisteripariin EDX:EAX

      push ESI
      mov ESI, edx
      xor EDX,EDX

      // Summa = EDX:EAX (toistaiseksi vasta Eka)
      add EAX, esi
      adc EDX, 0
      add EAX, ecx
      adc EDX, 0
      pop ESI

      // EDX:EAX = 64-bittinen summa Eka Toka Kolmas.
      end;

      Delphisssä säännöt ovat siis hyvin yksinkertaisia:

      ensimmäinen, toinen, ja kolmas 32-bittinen parametri menevät (tässä järjestyksessä) rekistereihin EAX, EDX ja ECX.

      64-Bit paluuarvon tulee olla EDX:EAX-rekisteriparissa, 32-bit arvot EAX, 16-bit arvot AX ja 8-bit arvot AL -rekisterissä.

      Rekistereitä EAX, EDX ja ECX voi käyttää vapaasti, mutta muut rekisterit tulee tallentaa pinoon (PUSH) ja palauttaa pinosta (POP) ennen käyttöä / käytön jälkeen.

      JOS kyse on luokan metodista, silloin luokan datakenttiin osoitetaan SELF -arvolla, joka on ensimmäinen "näkymätön" parametri, eli luokkametodeissa EAX=SELF, ja silloin 1. näkyvä parametri = EDX ja 2. näkyvä parametri = ECX.

      C -koodaaja voi vain haaveilla näin selkeistä ja yksinkertaisista säännöistä, joita Delphi -ohjelmoija voi käyttää tehdessää assembly -kielisiä aliohjelmia Delphi -ohjelman osana.

      C -kielessä tosiaan parametrien ja paluuarvojen välitys oikein C -ohjelman ja assemblt -kielisen aliohjelman välillä edellyttää monimutkaisten ja sekavasti dokumentoitujen "constraints" -sääntöjen opettelua, jotta homman saisi toimimaan oikein.

      Jos joku väittää toisin, niin kirjoita assembly -kielinen toteutus asm -määreellä C -ohjelmaan siten, että C -otsikolla määritetty assembly -kielinen aliohjelma tekee osana C -ohjelmaa saman, kuin ylle kirjoittamani assembly -kielinen aliohjelma tekee osana Delphi -ohjelmaa.

      Siis jotain tämän tapaista:

      typedef unsigned int U32;

      funktion prototyyppi:

      __int64 LaskeYhteen(U32 Eka, U32 Toka, U32 Kolmas);

      toteutus sitten _asm -määreellä siten, että koko { lauseosa } on pelkkää assemblyä ilman C -kielellä toteutettua osaa.

      funktion siis pitäisi palauttaa kolmen etumerkittömän 32 -bittisen kokonaisluvun summa 64 -bittisenä lukuna siten, että summa on oikein laskettu, eli ns. ympäripyörähdystä ei saa päästä tapahtumaan.

      Ylle kirjoittamani koodi toimii oikein osana Delphi -ohjelmaa, mutta osaavatko C -koodaajat koodata vastaavan C -kielen inline assembly -ominaisuutta hyödyntämällä ?

      Alun esimerkin "pop EEIP" osalta totean esimerkin virheelliseksi koska 1) EEIP -rekisteriä ei ole olemassa, vaan 32-bittisessä ohjelmassa rekisteri on EIP ja 2) koska EIP -rekisteriin ei voi kohdistaa POP -toimintoa, joskin pelkkä "RET" ajaa saman asian kuin "pop EIP" tekisi, jos se olisi syntaktisesti kelvollinen, mitä se siis ei ole.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. En voi jutella kanssasi

      tietenkään, mutta täällä voin sanoa sinulle, että se sinun hiljaisuutesi ja herkkyytesi eivät ole heikkoutta. Ne ovat ih
      Tunteet
      39
      5150
    2. Trump ja Vance murskasivat ja nolasivat Zelenskyn tiedotusvälineiden edessä Valkoisessa talossa.

      Jopa oli uskomaton tilaisuus Valkoisessa talossa. Zelensky jäi täydelliseksi lehdellä soittelijaksi suhteessa Trumpiin j
      Maailman menoa
      518
      1730
    3. Kokoomus haluaa hoitaa flussat yksityisellä, jotta säästettäisiin rahaa ja aikaa

      Mies hakeutui Terveystalo Kamppiin flunssaoireiden takia helmikuisena sunnuntai-iltana. Diagnoosiksi kirjattiin influens
      Maailman menoa
      77
      1100
    4. Rakkaus ei iloitse vääryydestä vaan iloitsee yhdessä TOTUUDEN kanssa.

      Tajuatteko, että jotkut ihmiset pitävät siitä, kun toiset kaatuvat? He nauttivat siitä, kun toiset mokaavat tai käyttävä
      Idän uskonnot
      359
      1008
    5. Koska olet rakastellut

      Kaivattusi kanssa viimeksi?
      Ikävä
      77
      943
    6. Anteeksi Pekka -vedätys

      Apuna Ry:n somessa levinnyt Anteeksi Pakka -kampanja saa aina vaan kummallisempia piirteitä. ”Mä pyydän anteeksi. Mä
      Maailman menoa
      53
      921
    7. Kumpi tästä

      Teidän tilanteesta teki vaikeaa? Sivusta
      Ikävä
      59
      870
    8. Kaikkia ei voi miellyttää

      Eikä ole tarviskaan. Hyvää huomenta ja mukavaa perjantaita. 😊❄️⚜️✌🏼❤️
      Ikävä
      228
      814
    9. Mikä on kaivattusi ärsyttävin piirre?

      Mun kaivattu on erittäin vastahakoinen puhumaan itsestä. Kääntää puheenaiheen aina muuhun kun hänestä tulee puhetta.
      Ikävä
      50
      803
    10. Päivi Ollila on tehnyt kunnallisvalituksen saadakseen pidettyä Tarja Pirkkalaisen virassa

      Kaupunginhallituksen puheenjohtaja Päivi Ollila on tehnyt kunnallisvalituksen kaupungin johtamisjärjestelyiden muutokses
      Haapavesi
      58
      738
    Aihe