Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: asm interupt read hoe te gebruiken  (gelezen 1498 keer)

Offline xellos

  • Lid
  • Steunpunt: Nee
asm interupt read hoe te gebruiken
« Gepost op: 2009/08/10, 13:16:45 »
kan iemand mij vertellen hoe ik in asembly de read interupt moet gebruiken ?
ik heb overal gezocht maar kom er niet uit.
het enigste wat ik kan vinden is http://www.cin.ufpe.br/~if817/arquivos/asmtut/syscalls.html 
maar daar staat niet hoe ik het werkend kan krijgen in asm

Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
Re: asm interupt read hoe te gebruiken
« Reactie #1 Gepost op: 2009/08/10, 14:12:27 »
Welke assembler gebruik je? GAS, NASM? Dan kan ik het meteen in de juiste syntax gieten :) heb zelf het meest ervaring met NASM (Intel syntax) omdat ik AT&T syntax niet zo handig vind.
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
Re: asm interupt read hoe te gebruiken
« Reactie #2 Gepost op: 2009/08/10, 14:40:54 »
Kernel calls werken als volgt:
- wat er bij %eax staat steek je in eax
- het eerste argument steek je in ebx, het tweede in ecx, het derde in edx, enz...
- om de kernel call effectief uit te voeren roep je interrupt 0x80 aan via int 80h of int 0x80

----

Een voorbeeldje in NASM / Intel syntax:

; Enkele defines voor de assembler
STDIN: equ 0
STDOUT: equ 1
SYS_READ: equ 3
SYS_WRITE: equ 4

SYS_EXIT: equ 1
SUCCESS: equ 0

MAX_SIZE: equ 100

section .data
    message: db 'Wat wil je zeggen?', 10, 0 ; Bericht dat de gebruiker ziet + newline + nullbyte
    message_len: equ $-message ; Lengte van message in bytes
    outputmsg: db 'Je zei: ', 0
    outputmsg_len: equ $-outputmsg

section .bss
    input: resb MAX_SIZE ; Reserveer een string van MAX_SIZE bytes

section .text
    global _start
_start:
    ; Bericht weergeven
    mov eax, SYS_WRITE
    mov ebx, STDOUT
    mov ecx, message
    mov edx, message_len
    int 80h

    ; Lijn inlezen
    mov eax, SYS_READ
    mov ebx, STDIN
    mov ecx, input
    mov edx, MAX_SIZE
    int 80h
    
    ; Ingelezen lijn weergeven
    mov eax, SYS_WRITE
    mov ebx, STDOUT
    mov ecx, outputmsg
    mov edx, outputmsg_len
    int 80h
    mov eax, SYS_WRITE
    mov ebx, STDOUT
    mov ecx, input
    mov edx, MAX_SIZE
    int 80h

    ; Exit
    mov eax, SYS_EXIT
    mov ebx, SUCCESS
    int 80h

assembleren met: nasm -felf read.asm && ld -s -o read read.o
nadien uitvoeren met: ./read
« Laatst bewerkt op: 2009/08/10, 14:42:45 door profoX »
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline xellos

  • Lid
  • Steunpunt: Nee
Re: asm interupt read hoe te gebruiken
« Reactie #3 Gepost op: 2009/08/10, 17:37:43 »
heel erg bedankt

Offline xellos

  • Lid
  • Steunpunt: Nee
Re: asm interupt read hoe te gebruiken
« Reactie #4 Gepost op: 2009/08/10, 20:34:12 »
nog een vraag,
hoe weet je dat je bij stdin ebx de waarde 0 moet mee geven
en bij stdout de waarde 1?

Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
Re: asm interupt read hoe te gebruiken
« Reactie #5 Gepost op: 2009/08/10, 20:49:42 »
/usr/include/unistd.h voor die specifieke zaken,
maar gemakkelijker is natuurlijk Google ;)
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline xellos

  • Lid
  • Steunpunt: Nee
Re: asm interupt read hoe te gebruiken
« Reactie #6 Gepost op: 2009/08/11, 13:09:56 »
ik kan het daar niet in vinden hoor

Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
Re: asm interupt read hoe te gebruiken
« Reactie #7 Gepost op: 2009/08/11, 13:16:28 »
wesley@zeN:~$ grep -i stdin /usr/include/unistd.h
#define STDIN_FILENO    0       /* Standard input.  */
wesley@zeN:~$ grep -i stdout /usr/include/unistd.h
#define STDOUT_FILENO   1       /* Standard output.  */
Maar zoals ik al zei... Google is makkelijker :) http://linux.die.net/man/3/stdin
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)