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?
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
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!
EDX on kylläkin 32-bittinen, mutta muuten Grez selitti aivan oikein.
EDX..... ........ ........ ........ DX...... ........ DH...... DL...... 00000000 00000000 00000000 11111111
Juu, hyvä korjaus.
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.