assembly - zmienne

LE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 41
0

Mam takie dane w programie i chciałbym wywołać przerwanie systemowe "write" na linuxie.
Po wpisaniu tekstu w konsoli jego długość będzie w eax? Jak później wpisać tę długość do msg_len?
32bity, gnu assembler

Kopiuj
.data
msg: .ascii "                                           "
msg_len = . - msg
AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
1

Przerwanie "write" ? Jakie to przerwanie !??!

Jak masz zamiar używać funkcji z biblioteki standardowej C, to konwencja będzie w stylu C.
Disclaimer: nie pisałem w ASM na linuksie, ale widzę znaczne nieścisłości w tym, co piszesz.

LE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 41
0

@AnyKtokolwiek:
Mam na myśli taki kod

Kopiuj
movl $4, %eax
movl $1, %ebx
movl $msg, %ecx
movl $msg_len, %edx
int $0x80

Chodzi mi o wyłowanie systemowe.

stivens
  • Rejestracja: dni
  • Ostatnio: dni
0

Z tego co pamietam bedzie to rax / tutaj eax. W razie watpliwosci po prostu odpal to pod gdb.

A zmienne w assembly to czasem nie jest adres w pamieci? W sumie czym innym by mialy byc skoro procesor ma tylko rejestry.

movl $msg_len, %edx
Wpisuje Ci chyba adres do edx'a a nie wartosc pod tym adresem. Dokonaj dereferencji. Do wpisywania do zmiennej ta sama uwaga.

Tylko zaznaczam ze moglo mi sie pomylic bo assembly jest porabany

Tobiasz Stamborski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0

Nie do końca rozumiem w czym twój problem ale:

  1. Po wywołaniu w eax owszem będzie liczba faktycznie zapisanych bajtów czyli
    tyle samo co podałeś jako argument pisząc:
Kopiuj
movl $msg_len, %edx
  1. msg_len to w tym wypadku stała, zapis
Kopiuj
msg_len = . - msg

oznacza adres tego miejsca w kodzie odjąć adres msg czyli długość msg
w bajtach skoro jedno jest zaraz za drugim.

enedil
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1028
1
Tobiasz Stamborski napisał(a):
  1. Po wywołaniu w eax owszem będzie liczba faktycznie zapisanych bajtów czyli
    tyle samo co podałeś jako argument pisząc:

no nie, bo zapis w pełni może się nie udać

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.