2016-07-31 48 views
0

ich Assembler zu lernen und bin versucht, ein Problem habe mit diesem Tutorial http://www.tutorialspoint.com/assembly_programming/assembly_file_management.htmExtra-Zeichen am Ende der Dateinamen erstelle ich

es funktioniert schön und gut, außer wenn es aus der Datei schreibt. Anstelle von myfile.txt heißt es myfile.txtWelcome to Tutorials PointWritten to file?.

Ich kann nicht herausfinden, warum. Ich habe die Quelle aus dem Tutorial genommen und es macht das Gleiche.

Kann mir jemand sagen warum?


Ich verwende nasm 2.12.02. Ich habe es auch auf yasm 1.2.0 versucht, also bin ich mir ziemlich sicher, dass es der Assembler-Code ist, der das verursacht. Sie verwenden für Dateinamen und Dateidaten

Ich baue und läuft auf OpenSUSE Linux 3.16.7-35-default #1 SMP Sun Feb 7 17:32:21 UTC 2016 (832c776) x86_64 x86_64 x86_64 GNU/Linux

+0

Sie müssen Ihren Code in den Körper Ihrer Frage einfügen. – Laurel

+0

@ Laurel: Eigentlich ist das Problem aus den Symptomen offensichtlich, auch ohne den Code zu sehen oder das Tutorial zu betrachten. Aber ja, das wäre eine viel bessere Frage mit dem Code enthalten. Der Titel ist auch totaler Müll, da er das Problem überhaupt nicht beschreibt. –

Antwort

3

Sie wahrscheinlich eine , 0 (Null-Byte) ausgelassen die Zeichenfolge im .rodata Abschnitt zu beenden, wo Sie die String-Konstanten setzen.

Linux-Systemaufrufe (wie open(2)), die char* args nehmen akzeptieren nullterminierte C-Strings, anstatt eine String-Länge zu akzeptieren.

+2

Ich habe mir das Tutorial angesehen. Es hat 'Abschnitt \t .data file_name db 'myfile.txt' msg db 'Willkommen zu Tutorials Point'', d. H. Kein Null-Trennzeichen irgendwo. Ziemlich arm, weil das bedeutet, dass sie wahrscheinlich ihren eigenen Code nicht getestet haben. –

+0

... oder sie hatten Glück und einige Alignment-Optionen fügten dazwischen einige Null-Bytes hinzu. –

+0

Danke, ich werde einen Null-Terminator hinzufügen und zurück melden und es klingt wie der Täter. Kennen Sie irgendwelche besseren Tutorials da draußen? – Tyson