Autor Thema: Pulsar Fehler  (Gelesen 23834 mal)

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« am: 16. September 2013, 19:45 »
So da bin ich wieder und habe mich wieder an mein OS gesetzt.
Es kann nun Starten, eine Eingabe öffnen und einen Text ausgeben, und auf Befehle reagieren.
Jedoch ist hier mein Problem:
http://www.mediafire.com/?h5cv19kaexxoobk
Woher kommt denn bitte Schön die Help Nachricht im Copyright ??????
Ich bin jetzt echt verplüfft wie das der PC hinbekommt O.o
Hier die Einleitung von Hintergrund und Überschrift
setup_bg:
mov dx,0
call move_cursor

mov ah,09h
mov al, ''
mov bh,0
mov bl,00000111b
mov cx,2400
int 10h

mov si,version ;Versionsanzeige
mov dx,1
call print

.message:
mov dx,0
call newline
mov si,copyright ;Copyright Anzeige
call print

Hier ein Teil der CMD
cmd:
call newline

mov si,promt
mov dx,2
call print

.keybuffer:
mov dx,0
mov di,input_buffer
mov al,0
mov cx,256
rep stosb

mov ax,input_buffer
mov di,input_buffer

.loop:
call keyboard

cmp al,13
je .Done

cmp al,8
je .backspace

jmp .character

.backspace:
mov ah,0Eh
mov al,8
int 10h
mov al,32
int 10h
mov al,8
int 10h
dec di
jmp .loop
.character:
mov ah,0Eh
int 10h
stosb
jmp .loop
.Done:
mov ax,0
stosb

call newline

mov si,input_buffer
cmp BYTE [si],0
je cmd

mov di,help_string
call compare
jc help

mov si,no_command
call print

jmp cmd

Und noch die Funktionen dazu:

move_cursor:
pusha
mov ah,02h
mov bh,0
int 10h
popa
ret

print:
lodsb
cmp al,0
je print_done
mov ah,0eh
int 10h
jmp print

print_done:
cmp dx,1
je setup_bg.message
cmp dx,2
je cmd.keybuffer

jmp cmd

newline:
pusha
mov ah,0Eh
mov al,13
int 10h
mov al,10
int 10h
popa
ret

compare:
pusha
.loop:
mov al,[si]
mov ah,[di]

cmp al,ah
jne .not_equal

cmp al,0
je .equal

inc si
inc di
jmp .loop

.not_equal:
popa
clc
ret

.equal:
popa
stc
ret

keyboard:
pusha
mov ax,0
mov ah,10h
int 16h
mov [.buffer],ax
popa
mov ax,[.buffer]
ret

.buffer dw 0

help:
mov si,help_message
call print
jmp cmd


Ich kann keinen Fehler finden, bin echt Ratlos ,
glaube schon fast der PC will mir eins Auswischen  :x
« Letzte Änderung: 16. September 2013, 19:52 von Manello »

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 16. September 2013, 19:53 »
Wie ist denn help_message definiert? Ich vermute das fehlt ein 0-Byte am Ende.
Dieser Text wird unter jedem Beitrag angezeigt.

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 16. September 2013, 19:58 »
Oh, an einer Deffinierung an der Nachricht davor hat die 0 gefehl, daher
hat der die help Nachricht mitgezählt.

Aber ich habe noch eine Frage: Wie kann ich verhindern das man Promt löschen kann? Also
dass > Zeichen ? Weil wenn man es löscht und einmal etwas eingibt nimmt er keine Befehle
mehr an, und ich möchte es allgemein nicht das man es kann.
Muss ich da einen extra abgleich machen, ob die Delete Taste gedrückt ist und das Zeichen ein > ist,
und damit nicht gelöscht werden kann, oder gibt es da einen Trick?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 16. September 2013, 20:09 »
Ich würde da mitzählen wieviele Zeichen eingegeben wurden, also pro Zeichen einen Zähler um 1 erhöhen. Immer wenn Backspace gedrückt wird, wird dieser Zähler wieder um 1 verringert. Außer wenn der Zähler bereits 0 ist, dann wird die Backspace-Taste ignoriert.
Dieser Text wird unter jedem Beitrag angezeigt.

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 16. September 2013, 20:39 »
Hmm keine schlechte Idee, werde ich gleich morgen ausprobieren.

streetrunner

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 17. September 2013, 10:07 »
Falls du einen verschiebbaren Cursor hast würde ich das an der Position des selbigen festmachen, denn wenn dieser an den Anfang verschoben wird nützt einem die Anzahl der eingegebenen Zeichen herzlich wenig.

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 17. September 2013, 15:12 »
Danke es hat funktioniert!
Und nochwas: Wenn ich den PC herunterfahre, weis ich nicht ob er wirklich aus ist,
da mein VM Player direkt wieder startet

shutdown:
   mov   ax,5307h
   mov   cx,0003h
   mov   cx,0001h
   int   15

Schaltet es den PC wirklich aus oder ist es nur ein Restart?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 17. September 2013, 16:49 »
shutdown:
   mov   ax,5307h
   mov   cx,0003h
   mov   cx,0001h
   int   15

Du überschreibst da cx. Da sollte wohl bx stehen.

Schaltet es den PC wirklich aus oder ist es nur ein Restart?

Laut Dokumentation schaltet es den PC aus. Es ist allerdings möglich, dass das BIOS buggy ist.
Dieser Text wird unter jedem Beitrag angezeigt.

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 17. September 2013, 19:11 »
Alles klar, und noch eine Frage für die Zukunft:

"Falls" ich das OS mal veröffentlichen sollte, wie kann ich es vor Datenklau schützen?
(Meine Dateien liegen ja offen rum, und kann sie öffnen, wie kann ich sowas ändern?)
Wie weit geht das Urheberrecht?

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 17. September 2013, 23:04 »
Hallo,

"Falls" ich das OS mal veröffentlichen sollte, wie kann ich es vor Datenklau schützen?
Wenn dein Source nicht veröffentlicht wird (also nicht im Internet steht), dann kennt ihn keiner. Aus der fertigen Binärdatei wieder Quelltext zu machen ist recht aufwändig (sofern du gewisse Dummheiten nicht machst). Gegen den "bösen Gegner"(TM) hast du trotzdem keine Chance.

(Meine Dateien liegen ja offen rum, und kann sie öffnen, wie kann ich sowas ändern?)
??? Wenn du deinen Quelltext ins Netz stellst, bist du selbst schuld, wenn ihn jemand kopiert...

Wie weit geht das Urheberrecht?
Wenn du wirklich eine kommerzielle Verwendung anstrebst, dann beschäftige dich mit Software-Lizenzen (insbesondere GPL und deren Folgen!) und strebe ein gemütliches Gespräch mit dem Anwalt deines Vertrauens an. Was in Foren steht, ist sowieso nie die ganze Wahrheit.

Mal abgesehen davon, dass du dein OS vermutlich sowieso nicht gewinnbringend verkaufen kannst.

Gruß,
Svenska

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 18. September 2013, 16:48 »
Zitat
Wenn du deinen Quelltext ins Netz stellst, bist du selbst schuld, wenn ihn jemand kopiert...

Nein, ich meinte es das jemand eben die Bin Dateien wieder Quelltext macht, sieht man ja schon
gut wie das ganze funktioniert. Daher könnte man es doch mehr oder weniger kopieren oder
nachsehen wie es genau funktioniert, ich meine kann ich da nicht irgendwie ein Schutz über die Datei legen?

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 18. September 2013, 16:50 »
Was man ausführen kann, kann man auch lesen.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 18. September 2013, 16:51 »
Eben^^ Ich meine WIndows schützt sich sicherlich auch gegen soetwas...

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 18. September 2013, 17:01 »
Wogegen willst du dich denn schützen? Nur gegen das Lesen? Oder dagegen, dass jemand dein Produkt ohne deine Zustimmung verkauft? Microsoft hat für diesen Fall Anwälte. Oder willst du dich gegen was anderes schützen?
« Letzte Änderung: 18. September 2013, 17:07 von Jidder »
Dieser Text wird unter jedem Beitrag angezeigt.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 18. September 2013, 17:13 »
Wenn dein Source nicht veröffentlicht wird (also nicht im Internet steht), dann kennt ihn keiner. Aus der fertigen Binärdatei wieder Quelltext zu machen ist recht aufwändig (sofern du gewisse Dummheiten nicht machst). Gegen den "bösen Gegner"(TM) hast du trotzdem keine Chance.
Reicht dir diese Aussage nicht?

Was du suchst, sind Techniken wie "Obfuscation" oder Methoden, die ein Debuggen/Reverse Engineering erschweren. Auch Hardware-Dongles kommen gerne zum Einsatz, ähnlich wie Aktivierungszwänge und unfreiwilliges Nach-Hause-Telefonieren. Gegen professionelle Angreifer (u.a. Chinesen, Amerikaner) sind sie machtlos. Im Normalfall geht es neben dem technischen Verhindern von bösen Dingen vor allem um das Offensichtlichmachen des "besonderen Schutzes" (z.B. durch Verschlüsselung), damit die gesamte Maschinerie der Gesetzgebung auf den Bösewicht losgelassen werden kann.

Wie gesagt, deine Ansatzpunkte dafür sind Lizenzen, Gesetze und Anwälte. Aber wenn du das willst, stehst du auf der anderen Seite.

Gruss,
Svenska

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 19. September 2013, 09:41 »
Was man ausführen kann, kann man auch lesen.
Eben^^ Ich meine WIndows schützt sich sicherlich auch gegen soetwas...
Was genau an meiner Aussage hast du nicht verstanden? Windows-Binaries kann man ausführen, also kann man sie auch lesen. Punkt.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 19. September 2013, 14:44 »
Ah, jetzt habs ich.  :-o
Hätte aber nicht gedacht das es so ist, eher
codiert oder so, aber jetzt weis ich es ja.

Edit:
Noch ein Problem:
Ich habe nun mit einer TUI angefangen, und entwickle gerade eine "Grafik Engine" dafür,
und habe jetzt dass Probelm, dass ich Variablen nicht verändern kann,
ich habe mal irgendwo in einem Buch gelernt wie das geht, weis es jetzt jedoch nicht mehr :(
Hier der Code:
mov tui_h,50
mov tui_b,80
mov tui_al,0
mov tui_ao,0
Die Variablen werden ganz normal vorher mit db definiert.
Der Assemlber sagt mir dass es eine falsche combination
aus opcode und operanden ist. Wie kann ich das denn
nochmal anders machen?
« Letzte Änderung: 19. September 2013, 17:30 von Manello »

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 20. September 2013, 09:17 »
Ah, jetzt habs ich.  :-o
Hätte aber nicht gedacht das es so ist, eher
codiert oder so, aber jetzt weis ich es ja.
Codiert in x86-Instruktionen ist es. Aber das schöne an Codierungen ist, dass man sie umdrehen kann - nennt sich in diesem Fall Disassembler. ;)

Du könntest den Code natürlich auch so verschlüsseln, dass ihn keiner mehr entschlüsseln kann. Das Problem damit ist dann nur, dass das auch der Prozessor nicht mehr kann und der Code damit nicht mehr ausführbar wäre.

Zitat
mov   tui_h,50
   mov   tui_b,80
   mov   tui_al,0
   mov   tui_ao,0
Deine Labels werden beim Assemblieren einfach durch Zahlen ersetzt, genauergesagt durch die Adresse des Symbols. Eine konstante Zahl in eine andere konstante Zahl kopieren zu wollen ist Blödsinn. Vermutlich meinst du mov [tui_h], 50.

Wenn dir solche Grundlagen fehlen und du sie nicht selber gelöst bekommst, ist es aber vermutlich eine schlechte Idee, eine komplette Benutzeroberfläche in Assembler zu schreiben.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 20. September 2013, 15:07 »
Ich meine das es keine Grundlage ist, ich meine in meinem Buch (Assembler Maschienennahes Programmierne von anfang an)
habe ich gelernt das man diese Variablen einfach so überschreiben kann, und es hat mit dem
Assemblerprogramm von der CD auch geklappt. Momentan weies ich echt nicht mehr was der eche x86 assembler ist O.o
Der eine sagt dass, die andere Website sagt dies, und das Buch sagt wiederum nein so geht es gar nicht,
ist es denn wirklich so schwer den reinen Assembler zu finden/nutzen??

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #19 am: 20. September 2013, 17:39 »
Ungefähr so schwer wie den reinen Compiler zu finden (ohne zu sagen, für welche Sprache).
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen