assembly - zmienne

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

.data
msg: .ascii "                                           "
msg_len = . - msg
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.

0

@AnyKtokolwiek:
Mam na myśli taki kod

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

Chodzi mi o wyłowanie systemowe.

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

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:
movl $msg_len, %edx
  1. msg_len to w tym wypadku stała, zapis
msg_len = . - msg

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

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ć

1 użytkowników online, w tym zalogowanych: 0, gości: 1