Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 13

Temat: Kurs assemblera - problem

  1. #1
    Zarejestrowany
    Nov 2006
    Postów
    26

    Question Kurs assemblera - problem

    Ucze sie assemblera z kursu z pod adresu:
    http://rudy.mif.pg.gda.pl/~bogdro/linux/linux02.html

    Nie rozumiem jednej rzeczy, mianowicie co oznacza taki zapis:
    Kod:
    mov	[ edi-23 ], cl
    Chodzi mi o to "[edi-23]"
    Z góry dzięki.

  2. #2
    Zarejestrowany
    Jan 2007
    Postów
    97

    Domyślnie

    Ostatnio edytowane przez riche : 06-30-2008 - 21:05
    Człekowstret tryska z moich ust, parszywy kraj...

    perl -e 's^^i6([email protected]*^+s;\*; Wo\$_\;~;.s![(_\!]!l!g+y"i\[email protected]"Hro"+tr-6;~-ed\012-;print'
    --------------------------------------------------------------
    Most Intelligent Customers Realize Our Software Only Fools Teenagers

  3. #3
    Zarejestrowany
    Nov 2006
    Postów
    26

    Domyślnie

    Podałeś mi link do artykułu, z którego sie ucze jak już wcześniej napisałem.
    Niestety nie ma tam napisane (ew. ja nie rozumiem) co oznacza to [edi-23]

  4. #4
    Zarejestrowany
    Jan 2008
    Skąd
    za NATem :)
    Postów
    155

    Domyślnie

    Kod:
    mov	[ edi-23 ], cl
    "Skopiuj rejestr cl do komórki pamięci, której adres wynosi: wartość rejestru EDI zmniejszona o liczbę 23"

  5. #5
    Zarejestrowany
    Nov 2006
    Postów
    26

    Domyślnie

    Dzieki xD

    BTW. Nie znacie jakichs innych kursów asma pod linuksa?

  6. #6
    rip
    rip jest offline Banned
    Zarejestrowany
    May 2008
    Postów
    534

    Domyślnie

    BTW. Nie znacie jakichs innych kursów asma pod linuksa?
    asm pod linuxa?
    poczytaj o int 128, to jest glowne api. Oraz format elf, czyli kozystanie z blibliotek.

  7. #7
    Zarejestrowany
    Nov 2006
    Postów
    26

    Domyślnie

    No dobra mam taki program:
    Kod:
    start:
    
    	mov eax, 3
    	mov ebx, 0
    	mov ecx, bufor
    	mov edx, 10
    	int 0x80
    
    	mov eax, 1
    	int	0x80
    
    
    segment readable writeable
    
    bufor: times 10 db 0
    Jak widać alokuje on bufor o wielkości 10 bajtów i zczytuje do niego dane z klawiatury.
    Jak mam teraz wrzucić do jakiejś zmiennej (ew. do rejestru) np. 4 litere tego co ktoś wpisał?

  8. #8
    rip
    rip jest offline Banned
    Zarejestrowany
    May 2008
    Postów
    534

    Domyślnie

    On nie alokuje bufora. Od tego masz stos i ewentualnie heap. Takie cos to lamerstwo .

    nie mam teraz linuxa pod reka, wiec pisze na slepo:

    Kod:
    sub esp,10 ;tutaj alokuje 10 bajtow.
    mov eax,3
    mov ebx,0
    mov ecx,esp
    mov edx,10
    push esp ;ecx CHYBA nie jest zachowywany po wyjsciu z 80h
    int 0x80
    ;pomijam sprawdzanie bledow, i zakladam ze faktycznie ktos wpisal >3 bajty...
    mov eax,4
    mov ebx,1
    pop ecx
    mov edx,1
    int 0x80 ;wywalamy 1 bajt na stdout
    mov eax,1
    mov ebx,0
    int 0x80



    btw, moze nie znasz: http://rudy.mif.pg.gda.pl/~bogdro/linux/przer80h_1.html
    Ostatnio edytowane przez rip : 07-01-2008 - 20:38

  9. #9
    Zarejestrowany
    Nov 2006
    Postów
    26

    Unhappy

    Dzieki działa.
    Teraz mam inny problem, którego wogole nie moge zrozumieć.
    Napisałem prościutki program który zczytuje z klawiatury kilka znaków i sprawdza czy ktoś wpisał 1 czy więcej.
    Kod:
    Kod:
    start:
    	mov eax, 3
    	mov ebx, 0
    	mov ecx, znaki
    	mov edx, 10
    	int 0x80
    
    	cmp byte [znaki+2], 0
    	je blablaba
    
    	mov eax, 1
    	xor ebx, ebx
    	int 0x80
    
    blabla:
    	ret
    
    segment readable writeable
    
    znaki: times 10 db 0
    Jeżeli wpisał tylko 1 to [znaki+2]=0
    No i jeżeli rzeczywiście tak jest to program ma skoczyć do blabla o czym mowi:
    Kod:
    je blablaba
    Najwidoczniej do tego momentu wszystko działa, bo kiedy znaków jest więcej niż 1 to program sie wyłącza, ale jeżeli jest tylko 1 to jest błąd:
    Kod:
    Segmentation fault (core dumped)
    Najciekawsze jest to, że jeżel zamienie linijke
    Kod:
    je blablaba
    powiedzmy na
    Kod:
    je start
    to wszystko jest ok.
    Co zatem powoduje error przy skakaniu do blabla?

  10. #10
    rip
    rip jest offline Banned
    Zarejestrowany
    May 2008
    Postów
    534

    Domyślnie

    pod linuxem jest powrot do libc? Slyszalem o tym, ale nie bez powodu jest sys_exit.

    ret = pop eip. Nie ma takiej instrukcji, ale o to chodzi.


    znaki: times 10 db 0
    A ty dalej swoje. No coz, nie, to nie
    Ostatnio edytowane przez rip : 07-02-2008 - 19:53

Strona 1 z 2 12 OstatniOstatni

Podobne wątki

  1. Kurs JavaScript
    By Knopix in forum Inne języki
    Odpowiedzi: 8
    Autor: 07-16-2014, 21:38
  2. Video Kurs c++
    By Royal Majer in forum C/C++
    Odpowiedzi: 9
    Autor: 02-08-2010, 20:28
  3. Delphi (kurs)??
    By 4ndr1u in forum Delphi/Pascal/Lisp
    Odpowiedzi: 2
    Autor: 06-26-2008, 14:06
  4. Kurs Python'a
    By 4ndr1u in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 1
    Autor: 05-16-2008, 18:20
  5. Kurs HTML
    By Virus in forum HTML/DHTML/XHTML
    Odpowiedzi: 12
    Autor: 08-13-2007, 13:46

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj