Keresés

Új hozzászólás Aktív témák

  • Szirty

    őstag

    válasz KB.Pifu #4133 üzenetére

    Szevasz Pifu!

    "Keresztbecímzésben lesz a hiba, innen legalább már erre is figyelek."

    Arra bizony nagyon oda kell figyelni, mert nagyon durván lehet szívni ilyen hibával!
    Segít ezt elkerülni a keresztreferencia táblázat. De nem árt érteni amit mutat. Nem bonyolult, csak elsőre riasztó :)

    Valamivel barátságosabb (kevesebb fölösleges infót ad ha csak egy cím érdekel) a Go To Location funkció.
    A lényege az, hogy megmondja hol fordul még elő az a cím a programban. Csak azzal a címmel foglalkozik (míg a keresztreferenciában az összes benne van).
    Egy listát kapsz az előfordulásokról amiből ha választasz, akkor oda ugrik.
    Az ablakban van egy opció, aminek a neve "Overlapping access to memory areas".
    Ha azt is bekapcsolod, akkor minden olyan címet is beletesz a listába, ami átfedésben van a keresett címmel.
    Ez rendkívül hasznos!

    A probléma akkor fokozódik, ha DB címekről van szó. Azokat ugyanis el lehet érni teljes címzés nélkül is. Pl. így:
    OPN DB6
    L DBW4

    Mivel a fordító nem végez kód elemzést (nem is nagyon tehetne ilyet), nem tudja, hogy ha van egy L DBW4 az a DBW4 melyik DB blokkra vonatkozhat.
    Azonban a GoTo Location ezeknek a megkeresésére is ad támogatást.
    Ha csak a rövid címet adod meg, akkor felsorol minden olyan programsort, amiben az adott bit, byte word, dword címzése szerepel bármelyik DB-ben.
    Hogy melyikben szerepel azt pedig megmutatja (ha tudja) ha kiválasztod az adott sort:

    A probléma tovább fokozódik ha a keresett címet a program valahol indirekt módon is írja.
    Az indirekt címzéssel e a keresztreferencia és így a GoTo Location sem tud semmit kezdeni, hiszen annak jellegéből adódóan a cím csak futás közben derül ki. Futás közben egy címet pedig számtalan körülmény befolyásolhat a kódtól függően, a fordító nem tudja előre hogy a lefordított kód milyen körülmények között milyen címet fog majd kiszámítani.

Új hozzászólás Aktív témák