Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Assembly: Yksinkertainen assy kysymys

Toshiba [05.07.2009 16:56:00]

#

Tervehdys,

Kyse on varmasti yksinkertaisesta asiasta mikä ei nyt vaan mene jakeluun. AND-tunnetusti antaa arvoksi jos allekkain on 1-1 = 1 ja 1-0 = 0, mutta miten seuraava toimii?

AND EDX, 0FF

Tämä jättää pistää kaikki muut paitsi kaikki muut paitsi DL, edx nolliksi? Miten tämän voisi selittää paperilla ymmärrettävästi?

0ff = 11 11 11 11 binaarina ja jos ajattelee, että edx:n sisällä olisi jotain randomia, niin miten muka ne menee nolliksi?

Grez [05.07.2009 17:08:02]

#

edx on 16-bittinen rekisteri ja jos teet and-käskyn edx-rekisterille, niin 2. operandina annettava vakio on myös 16-bittinen.

Jos annat kääntäjälle luvun vajaana (vähemmän bittejä kuin mitä ko. yhteydessä täytyy antaa) niin kääntäjä lisää puuttuvat bitit automaattisesti.

00FF on binäärinä:
0000 0000 1111 1111

    abcd efgh ijkl mnop
and 0000 0000 1111 1111
-----------------------
  = 0000 0000 ijkl mnop

Toshiba [05.07.2009 17:27:17]

#

Ok, selvä homma! Kiitos avusta. Menin jotenki lukkoon kun en tajunnut, että se on 16bittinen ja sitten jäin ihmettelemään, että miten noi ykköset saa aikaan nollia.. Mutta hyvä esimerkki ja homma ratkesi! :)

Kiitoksia avusta!

Metabolix [05.07.2009 19:34:10]

#

EDX on kylläkin 32-bittinen, mutta muuten Grez selitti aivan oikein.

EDX..... ........ ........ ........
                  DX...... ........
                  DH...... DL......
00000000 00000000 00000000 11111111

Grez [05.07.2009 19:36:49]

#

Juu, hyvä korjaus.

Toshiba [08.07.2009 20:56:04]

#

Assya opetellessa, löytyisköhän jostain tietoa exen rakenteesta eli:

VA: virtual address
RVA: relative virtual address
EP: entry point
Image Base: ?? jotain tekemistä headereiden kanssa? esim. dll?

Linkkejä, suomenkielisiä oppaita tjn vastaavaa? Noita kuitenki pitää näköjään laskeskella.

Deffi [22.07.2009 03:58:45]

#

Virtual address on osoite johonkin kohtaa muistia. PE:t (portable executablet, ne .exet) ladataan yleensä VA:han 0x00400000, jota kutsutaan hienosti imagebaseksi. Relative virtual address on taas virtual address - imagebase. Entrypoint on RVA mistä ohjelman suoritus alkaa. Entrypoint ja imagebase on määritelty PE headerista. Englanninkielistä tutoriaalia aiheesta löytyy Iczelionin sivuilta.

Suosittelen lataamaan ollydbg:n, sillä voit avata haluamas .exen ja tutkiskella sen PE headeria. Painat vaan ctrl + M ja tuplaklikkaat jotain kivaa kohtaa missä lukee PE header.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta