logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ASM - Jak skopiować nazwy plików do zmiennych w bibliotece?

hntr 14 Paź 2008 19:50 1753 9
REKLAMA
  • #1 5631661
    hntr
    Poziom 10  
    Posty: 27
    Witam,

    mam problem, utworzyłem biblioteke w ASM która ma funkcję przyjmującą jako argumenty dwie nazwy plików, i chce je przekopiować do zmiennych w ASM z których później są one używane do kompresji i dekompresji problem mam jak przekopiować stringi z nazwami plików do tych zmiennych...

    oto fragment :

    %
    .data
     plik_wejsciowy        db 256 dup(0)
     plik_wyjsciowy        db 256 dup(0)
    
    ;include (inne funkcje ktore dzialaja na tych zmiennych)
    
    .code
    
    DllEntry proc hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
            mov  eax,TRUE
            ret
    DllEntry Endp
    
    Operacja proc co_robic: DWORD, in_filename:DWORD,  out_filename:DWORD
    
    	lea edx, plik_wejsciowy  ;chce zaladowac adres zmiennej do edx
    	mov edx, in_filename    ; chce skopiować in_filename do edx
    	mov byte ptr [edx], 0   ; chyba kasuje edx znalazlem gdzies w 
    ;  rzykladzie
    
    	pushad
    
    	lea edx, plik_wyjsciowy
    	mov edx, out_filename
    	mov byte ptr [edx], 0
    	
           pushad
    
    ; tu sie konczy miejsce które nie działa
    
    ;   mov     zapisywac_wynik?, TRUE
            mov		eax, co_robic
           mov     akcja, eax
            call    przetwarzaj
            popad
    
            ret  	
    	
    Operacja endp
    
    End DllEntry
  • REKLAMA
  • REKLAMA
  • #3 5631913
    hntr
    Poziom 10  
    Posty: 27
    Nie bardzo wiem jak .. ale probowalem w ten sposób:

    jeśli zmienne funkcji nazwałem
    Operacja proc co_robic: DWORD, plik_wejsciowy:DWORD,  plik_wyjsciowy:DWORD


    to otrzymałem błąd przy kompilacji, ze podwojna deklaracja
    Error 1 error A2005:symbol redefinition : plik_wejsciowy c:\Users

    jeśli ich definicję zakomentowałem
     ;plik_wejsciowy        db 256 dup(0)
     ;plik_wyjsciowy        db 256 dup(0)


    to ze nie jest okreslona:
    Error 1 error A2006:undefined symbol : plik_wejsciowy

    zmiennych tych nie bede przerabiać, używam ich pozniej w funkcji CreateFileW w takiej postaci, tylko nei wiem jak je przekopiować lub ewentualnie użyć ich od razu z funkcji
  • REKLAMA
  • #5 5632120
    hntr
    Poziom 10  
    Posty: 27
    używam tego:

       lea edx,in_filename
       mov plik_wejsciowy,edx


    ale niestety nie da się skompilować


    mov niedziala : instruction operands must be the same size
  • #6 5632443
    Dr.Vee
    VIP Zasłużony dla elektroda
    Posty: 1784
    Pomógł: 307
    Ocena: 76
    Z tego co rozumiem, to w parametrach masz przekazywane adresy pamięci, pod którymi znajdują się pierwsze znaki nazw plików. Możesz albo:
    1) przekazać te adresy dalej (i zmienić dalsze funkcje), albo 2) skopiować zawartość napisów do Twoich zmiennych.

    Poczytaj o adresowaniu pośrednim, np:
    mov eax, [edx]


    Pozdrawiam,
    Dr.Vee
  • REKLAMA
  • #8 5635728
    hntr
    Poziom 10  
    Posty: 27
    mozesz wyjasnic w jaki sposób? jestem poczatkujący w asm
  • #9 5638552
    Dżyszla
    Poziom 42  
    Posty: 7065
    Pomógł: 1095
    Ocena: 211
    Jeśli w assemblerze wykorzystujesz zmienną (w szczególności Pchar, czyli ciąg bajtów zakończony znakiem #0), to nie robisz nic innego, jak wykrozsytujesz jedynie adres początku tego ciągu. I tyle wystarczy do ASM przekazać i wykorzystywać.
  • #10 5665357
    DALAILAMER
    Poziom 2  
    Posty: 2
    oj normalnie sie przesyla ,
    pod adresem DS:SI umieszczasz adres zrodlowy
    pod ES:DI adres docelowy . teraz piszesz
    CX = ile danych przeniesc
    CLD
    REP MOVSB

    i robi sie samo w mgnieniu okow :) myslalem ze kazdy wie :idea:

    Problem naj w tym ze nie wiem dokladnie co chcesz skopiowac i do kad
    zupelnie nie mam orientu w tym kodzie zrodlowym ktory wkleiles.

Podsumowanie tematu

✨ Dyskusja dotyczy problemu kopiowania nazw plików przekazywanych jako argumenty do zmiennych w asemblerze (ASM) w kontekście funkcji kompresji i dekompresji. Autor próbuje skopiować stringi z nazwami plików do zdefiniowanych w sekcji .data zmiennych typu db, jednak napotyka błędy kompilacji związane z redefinicją symboli oraz niezgodnością rozmiarów operandów przy instrukcji MOV. Wskazano, że parametry funkcji to adresy pamięci wskazujące na ciągi znaków, które można albo przekazać dalej bezpośrednio, albo skopiować zawartość tych ciągów do lokalnych buforów. Zaproponowano użycie instrukcji z adresowaniem pośrednim oraz standardowej procedury kopiowania bloków pamięci za pomocą rejestrów DS:SI (źródło), ES:DI (cel), CX (długość) i instrukcji REP MOVSB. Podkreślono, że w ASM do operacji na stringach wystarczy posługiwać się ich adresami, a kopiowanie można wykonać poprzez pętlę lub instrukcję REP MOVSB. Problemem jest także prawidłowe zarządzanie symbolami i unikanie konfliktów nazw zmiennych w kodzie.
Wygenerowane przez model językowy.
REKLAMA