[LINUX] STDIN stoppen

16/01/2011 - 09:51 von Ralph rkhb Bauer | Report spam
Hallo,

ein seltsames Phànomen beschàftigt mich. Wenn ich per Int 0x80 die
SYS_READ-Funktion mit einer vorgegebenen Maximalzahl von Buchstaben
ausführe und "zu viele" Buchstaben eingebe, dann kommt der Rest zur
STDIN der Bash und wird ausgeführt. Das nervt ziemlich.

Ein Beispiel (BS: Debian Lenny Kernel 2.6.24, SH: GNU bash 3.2.39):


snip --

# Name: Eingabe.s
# Kompilieren: gcc Eingabe.s
# Ausführen: ./a.out

.data
s1: .ascii "Eingabe: "
s1_len = .-s1
e1: .ascii "", ""
e1_len = .-e1-1

.text
.globl main
main:

# Eingabetext ausgeben

mov $4, %eax # Kernel-Funktion SYS_WRITE
mov $1, %ebx # STDOUT
mov $s1, %ecx # Zeiger auf Text: "Eingabe: "
mov $s1_len, %edx # Anzahl der zu schreibenden Bytes
int $0x80 # Systemruf

# Eingabe
mov $3, %eax # Kernel-Funktion SYS_READ
xor %ebx, %ebx # EBX=0: STDIN
mov $e1, %ecx # Zeiger auf Eingabepuffer
mov $e1_len, %edx # Anzahl der zu lesenden Bytes
int $0x80 # Systemruf
mov -1(%eax,%ecx),%bl # letztes Zeichen im Puffer nach BL
cmp $10, %bl # LF noch im Puffer?
je 1f # ja: ok
inc %eax # nein: Zeichenanzahl+1
1:

# Eingabe ausgeben
mov %eax, %edx # Anzahl der zu schreibenden Bytes
mov $4, %eax # Kernel-Funktion SYS_WRITE
mov $1, %ebx # STDOUT
mov $e1, %ecx # Adresse der Zeichenkette
int $0x80 # Systemruf

# Exit
movl $1, %eax # Kernel-Funktion SYS_EXIT
movl $0, %ebx # Rückkehrwert: 0
int $0x80 # Systemruf

snip --

Konsole:

# ./a.out
Eingabe: 12
12
# ./a.out
Eingabe: 12345
123
# 45
-bash: 45: command not found
#

Die Gefàhrlichkeit solchen Verhaltens wird deutlich, wenn man bei
Eingabe "ls ls" eingibt. Wie schalte ich einen solchen Durchgriff ab?

viele grüße
ralph
 

Lesen sie die antworten

#1 Stefan Reuther
16/01/2011 - 12:42 | Warnen spam
Ralph 'rkhb' Bauer wrote:
ein seltsames Phànomen beschàftigt mich. Wenn ich per Int 0x80 die
SYS_READ-Funktion mit einer vorgegebenen Maximalzahl von Buchstaben
ausführe und "zu viele" Buchstaben eingebe, dann kommt der Rest zur
STDIN der Bash und wird ausgeführt. Das nervt ziemlich.


[...]
Die Gefàhrlichkeit solchen Verhaltens wird deutlich, wenn man bei
Eingabe "ls ls" eingibt. Wie schalte ich einen solchen Durchgriff ab?



Indem du solange weiter liest, bis du ein '' oder ein EOF bekommst.


Stefan

Ähnliche fragen