Memória lecsípés

Memória lecsípés
2013-06-18T20:57:00+02:00
2013-06-19T15:00:58+02:00
2022-11-29T06:30:37+01:00
*deleted_67298407
Itt akadtam el: a program indításakor a kért memória méretet simán lefoglalja, múködödik, de ha valamit meg akarok hívni és pl kell +4kb akkor ahol megjelöltem, ott akadok el, nem tudom még miért, de az eax-ban megvan az érték [debugger szerint] és a mov átadás után a dword [edi] értéke 0H.
Ha több hajam lenne még azt is kitépném....
annyiszor átnéztem.
mellékeltem az egész memória kezelést.

Témakörnek UNIX-ot adtam meg, de QNX alá íródik.


.split_block: cmp edx,eax jz .whole_block_win ;int 3 sub edx,eax sub edx,MEM_BLOCK_HEADER_SIZE ;int 3 ;cmp edx,MEM_BLOCK_HEADER_SIZE jb .whole_block_win jz .whole_block_win mov edi,[esi] split mov dword [esi],0 mov dword [edi+0CH],.dealloc_routine mov dword [edi],eax ; Itt akadtam el mov ebp, [edi+8] mov esi,edi add edi,MEM_BLOCK_HEADER_SIZE push edi add eax,edi cmp esi,[last_block] jnz .not_last mov [last_block],eax
Mutasd a teljes hozzászólást!
Csatolt állomány
Tipp öt: felülírod a kódodat.
Mutasd a teljes hozzászólást!

  • Hát tippek:
    1, biztos hogy nem ebben a sorban van a hiba (mov dword [edi],eax )
    2, mov edi,[esi] split <- a split az micsoda? ilyen változót nem találtam
    3, be akarsz includeolni egy system.inc -t is, azt nem raktad bele
    4, mivel fordítod? (masm, gcc nekem nem fordította le)
    Mutasd a teljes hozzászólást!
  • 4, mivel fordítod? (masm, gcc nekem nem fordította le)


    Ránézésre NASM szintaxis (abban vannak ponttal kezdődő lokális label-ek). Esetleg YASM lehet még, az is megeszi a NASM szintaxist.

    2, mov edi,[esi] split <- a split az micsoda? ilyen változót nem találtam


    Ez engem is érdekelne. Nosplit kulcsszó van NASM-ban, de split kulcsszó elvileg nincs. Ez így gyanúsan nem érvényes kódsor, legalább is ha NASM szintaxist feltételezünk.

    Az is lehet, hogy ez a kód nem is fordul, és ezért jön a "lehetetlen" hiba, mert a forráskód nem azt tükrözi, ami ténylegesen fut. De persze így ez csak sötétben tapogatózás.
    Mutasd a teljes hozzászólást!
  • Köszi, yasm lesz valószínű %assign alapján.

    De 30-40 errort dob...
    Mutasd a teljes hozzászólást!
  • mov edi,[esi]; split

    Ezt már kijavítottam, ott töröltem és átírtam egy részt, de a split ott maradt. Sajnos a Prog.hu-ra már így küldtem el

    NASM-ban van írva, le is fordul, Sejtem/tudom, hogy nem ott van a hiba már ahol konkrétan jelentkezik, hanem valamelyik meghívott funkcióban, ezt próbálom kideríteni.

    Önmagában persze, hogy nem fordul le, hisz inc a kiterjesztése. Memória kezelő része egy programnak.

    Az inc fájlokból azokat küldöm amit ez a rész használ.

    Fordítás:

    ASFLAGS := -w+orphan-labels -w+macro-params -i../inc/ DEFINES := -D__$(OS)__ -D__KERNEL__=$(KERNEL) -D__SYSCALL__=__S_$(SYSCALL)__\ -D__OPTIMIZE__=__O_$(OPTIMIZE)__ -D__$(EXECUTABLE)__ ifeq ($(OPTIMIZE),SIZE) ASFLAGS += -O99v endif
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Tipp öt: felülírod a kódodat.
    Mutasd a teljes hozzászólást!
  • Jó tipp, erre nem is gondoltam!

    csörnyeföldi: Nem tudom, milyen debuggert használsz, de ha lehet, kérjél tőle egy disassembly-t, mielőtt a problémás utasítás sorra kerülne. Ha nem azt látod, mint ami a forrásban van, akkor:
    1. Ellenőrizd, hogy tényleg a fordító aktuális kimenetét futtatod, és nem valami régebbi verziót.
    2. Ha az első pontban nem találsz gondot, akkor mehet egy hardveres write breakpoint a felülíródó utasításra, lehetőleg a program legeslegelején beállítva, és akkor egyből értesülsz róla, amikor felülíródik a kódod.
    Mutasd a teljes hozzászólást!
  • Kössz a a jótanácsot, megtaláltam a hibát, az os_qnx.inc-ben rosszul definiáltam a SYSCALL_GATE makrón belül a DO_SYSCALL-t.

    Azt nem mondom, hogy tökéletes, de egyenlőre annyit látok, hogy hibátlanul működik. Oszt majd eljön a puding próbája is.

    Mindenkinek köszi a tanácsokat,

    Üdv.
    Mutasd a teljes hozzászólást!
  • 2. Ha az első pontban nem találsz gondot, akkor mehet egy hardveres write breakpoint a felülíródó utasításra, lehetőleg a program legeslegelején beállítva, és akkor egyből értesülsz róla, amikor felülíródik a kódod.


    Te is megérdemelnéd a pontot, de csak egynek adhattam... és @Denzelii ébresztett fel.

    Mindenkinek kellemes napot, megyek aludni és este majd folytatom.
    Mutasd a teljes hozzászólást!
  • Ja, szerintem is csak a felét érdemlem, 25p -t átutalok Csaboka2 -nak :)
    Mutasd a teljes hozzászólást!
  • Örülök, hogy segíthettem, a pontokon meg nem fogunk összeveszni
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd