Seite 1 von 2

yasm

Verfasst: 26. Okt 2011 19:16
von hstr
Hi,
ich hab eben versucht das Beispielprogramm aus Vorlesung_4.pdf (Seite 50) per SSH auf clientssh1.rbg.informatik.tu-darmstadt.de und clientssh3.rbg.informatik.tu-darmstadt.de zum laufen zu bringen.
Aber wenn ich "yasm dateiname" eingebe, erhalte ich folgenden Fehler:
test1:1: warning: no non-local label before `.data'
test1:2: error: instruction expected after label
test1:2: warning: no non-local label before `.string'
test1:3: error: instruction expected after label
test1:4: error: instruction expected after label
test1:6: error: instruction expected after label
test1:8: error: instruction expected after label
test1:8: warning: ignoring unrecognized character `#'
test1:8: warning: ignoring unrecognized character `M-d'
test1:9: error: instruction expected after label
test1:9: warning: ignoring unrecognized character `#'
test1:10: error: instruction expected after label
test1:10: warning: ignoring unrecognized character `#'
test1:11: error: instruction expected after label
test1:11: warning: ignoring unrecognized character `#'
test1:14: error: instruction expected after label
test1:15: error: instruction expected after label
test1:16: error: instruction expected after label
test1:20: error: instruction expected after label
test1:20: warning: ignoring unrecognized character `#'
test1:21: error: instruction expected after label
test1:22: error: undefined symbol `printf' (first use)
test1:22: error: (Each undefined symbol is reported only once.)
test1:23: error: instruction expected after label
test1:23: warning: ignoring unrecognized character `#'
test1:24: error: undefined symbol `0x80' (first use)

Den selben Fehler erhalte ich überigens auch, wenn ich yasm auf einem 32bit Linuxsystem hier auf meinem Rechner ausführe.

Was mache ich falsch? :(

Re: yasm

Verfasst: 26. Okt 2011 20:53
von mw1039
Hi,

mittlerweile sind das erste Praktikum und die zweite Hausuebung im Moodle hochgeladen. In beiden sind auch Kompilationsanweisungen enthalten, die zumindest bei mir funktioniert haben. Hast du die Zeilen schonmal ausprobiert? Grundsaetzlich solltest du es nur auf clientssh1 oder clientssh2 probieren.

Gruss,
Michael

Re: yasm

Verfasst: 26. Okt 2011 21:36
von neoatlant
Funktioniert bei mir auch, eine Frage noch, darf man wie bei printf, funktionen aus der C Library im Praktikum verwenden ?

Re: yasm

Verfasst: 27. Okt 2011 08:32
von hstr
Hi,
also ich hab es jetzt mit den Befehlen aus Praktikum1.pdf
yasm -f elf -p gas Datei.asm
gcc -melf_i386 -o Datei Datei.o
./Datei
geschafft das die Datei durch yasm und gcc läuft, aber wenn ich ./Datei aufrufe
passiert gar nichts, es sollte aber doch irgendwas per intout ausgegeben werden?

Re: yasm

Verfasst: 27. Okt 2011 09:51
von zimpfer
Welche Datei hast du assembliert? Das Beispiel von Seite 50 aus dem 4. Foliensatz?

Dann hast du es wahrscheinlich direkt kopiert aus der PDF und es ist ein Leerzeichen in intout zwischen dem "\" und dem "n" ganz hinten, welches nicht da sein soll...

Re: yasm

Verfasst: 27. Okt 2011 09:58
von hstr
zimpfer hat geschrieben:Welche Datei hast du assembliert? Das Beispiel von Seite 50 aus dem 4. Foliensatz?

Dann hast du es wahrscheinlich direkt kopiert aus der PDF und es ist ein Leerzeichen in intout zwischen dem "\" und dem "n" ganz hinten, welches nicht da sein soll...
Genau das war der Fehler, vielen Dank!

Re: yasm

Verfasst: 27. Okt 2011 10:34
von mw1039
neoatlant hat geschrieben:Funktioniert bei mir auch, eine Frage noch, darf man wie bei printf, funktionen aus der C Library im Praktikum verwenden ?
Es darf nur printf (und spaeter bspw. scanf) benutzt werden. Ansonsten koennte man saemtliche Probleme in C loesen und einbinden.

Re: yasm

Verfasst: 28. Okt 2011 09:06
von danny
Weil es so gut in den Thread passt: Folgende Befehle scheinen auf den schwarzen Poolrechnern 32bit Assembler erfolgreich zu einer ausführbaren Datei zu machen:

Code: Alles auswählen

yasm -f elf32 -p gas Datei.asm
ld -melf_i386 -o Datei Datei.o
PS: allerdings habe ich noch nicht ausporbiert, ob man bei Benutzung von z. B. printf dann noch die C-Library per Hand mit reinlinken muss

Re: yasm

Verfasst: 28. Okt 2011 14:09
von Benedikt W.
Hi,
ich habe mich über ssh angemeldet und kann die Befehle:
yasm -f elf -p gas Datei.asm
gcc -melf_i386 -o Datei Datei.o
ohne Probleme ausführen. Wenn ich allerdings das Programm mit ./Datei ausführen will bekomme ich immer einen Fehler. Hatte jemand schonmal dieses Problem und kann mir helfen?
Schonmal Danke

Re: yasm

Verfasst: 28. Okt 2011 15:35
von Sascha-Thorsten
Hallo liebe Kommilitonen,

wenn ich die funktion strcat aufrufen will, wie muss ich das anstellen?
Mein erster Ansatz war:

pushl $string1
pushl $string2
call strcat

Wo ist dann er der zusammengefügte String zu finden?

Danke im Vorraus

Re: yasm

Verfasst: 28. Okt 2011 23:44
von Bug
An die Windows-Nutzer (die es hier ja hoffentlich auch gibt) hätte ich eine kleine Frage zum Thema vsyasm.

Ich hab dank eines Eintrags im Archiv Yasm fürs Visual Studio installiert und passend eingerichtet bekommen. Debugger, Register-Ansicht & Co sind auch echt praktisch, nur kann ich dummerweise keine c-Funktionen aufrufen. So lange "call printf" im code steht, bekomme ich immer nur "error LNK2001: Nicht aufgelöstes externes Symbol "printf"." :x

Ich hab da inzwischen alle möglichen Anleitungen und Einstellungen ausprobiert und langsam gehen mir echt die Ideen aus, was man da noch machen kann. Falls also jemand eine Idee hat, würde ich mich sehr freuen.

Re: yasm

Verfasst: 29. Okt 2011 00:11
von zimpfer
Bug hat geschrieben:An die Windows-Nutzer (die es hier ja hoffentlich auch gibt) hätte ich eine kleine Frage zum Thema vsyasm.

Ich hab dank eines Eintrags im Archiv Yasm fürs Visual Studio installiert und passend eingerichtet bekommen. Debugger, Register-Ansicht & Co sind auch echt praktisch, nur kann ich dummerweise keine c-Funktionen aufrufen. So lange "call printf" im code steht, bekomme ich immer nur "error LNK2001: Nicht aufgelöstes externes Symbol "printf"." :x

Ich hab da inzwischen alle möglichen Anleitungen und Einstellungen ausprobiert und langsam gehen mir echt die Ideen aus, was man da noch machen kann. Falls also jemand eine Idee hat, würde ich mich sehr freuen.
Probier mal stattdessen _printf (mit Unterstrich), dann müsste es unter Windows gehen

Sascha-Thorsten hat geschrieben:Hallo liebe Kommilitonen,

wenn ich die funktion strcat aufrufen will, wie muss ich das anstellen?
Mein erster Ansatz war:

pushl $string1
pushl $string2
call strcat

Wo ist dann er der zusammengefügte String zu finden?

Danke im Vorraus
http://home.htw-berlin.de/~junghans/cref/MAN/strcat.htm

Re: yasm

Verfasst: 29. Okt 2011 12:41
von John_Silver
Bug hat geschrieben:An die Windows-Nutzer (die es hier ja hoffentlich auch gibt) hätte ich eine kleine Frage zum Thema vsyasm.

Ich hab dank eines Eintrags im Archiv Yasm fürs Visual Studio installiert und passend eingerichtet bekommen. Debugger, Register-Ansicht & Co sind auch echt praktisch, nur kann ich dummerweise keine c-Funktionen aufrufen. So lange "call printf" im code steht, bekomme ich immer nur "error LNK2001: Nicht aufgelöstes externes Symbol "printf"." :x

Ich hab da inzwischen alle möglichen Anleitungen und Einstellungen ausprobiert und langsam gehen mir echt die Ideen aus, was man da noch machen kann. Falls also jemand eine Idee hat, würde ich mich sehr freuen.
Welche Visual Studio nutzt du? Wie hast du es zum laufen bekommen? Wenn ich die Beispielprogramme kompilieren lassen will, bekomme ich nur Fehler ausgegeben.

Code: Alles auswählen

Warning	1	warning : no non-local label before `.data'	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\test.asm	1	1	yasm_bla
Error	2	error : instruction expected after label	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\test.asm	2	1	yasm_bla
Warning	3	warning : no non-local label before `.string'	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\test.asm	2	1	yasm_bla
Error	4	error : instruction expected after label	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\test.asm	5	1	yasm_bla
Error	5	error : instruction expected after label	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Wert fuer die Berechnung	yasm_bla
Warning	6	warning : ignoring unrecognized character `#'	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Wert fuer die Berechnung	yasm_bla
Error	7	error : instruction expected after label	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Wert im %eax ausgeben	yasm_bla
Error	8	error : instruction expected after label	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Wert im %eax ausgeben	yasm_bla
Error	9	error : undefined symbol `printf' (first use)	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Wert im %eax ausgeben	yasm_bla
Error	10	error : (Each undefined symbol is reported only once.)	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Wert im %eax ausgeben	yasm_bla
Error	11	error : instruction expected after label	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Exit	yasm_bla
Error	12	error : undefined symbol `0x80' (first use)	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Exit	yasm_bla
Error	13	error MSB3721: The command ""C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\"vsyasm.exe -Xvc -f Win32 -o "Debug\\" -rnasm -pnasm   test.asm" exited with code 1.	C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\vsyasm.targets	45	6	yasm_bla

Re: yasm

Verfasst: 29. Okt 2011 16:54
von Mirlix_
Ich bin gerade am schreiben einer Einleitung in x86 asm und nutze dafuer auch yasm, es fehlt noch einiges, aber ein Installations und Debugging Anleitung ist schon vorhanden, evt hilft es einigen hier. Es werden bestimmt noch massig Rechtschreibfehler etc drinne sein. Wenn ihr wirklich schlimmer Fehler findet die das Verstaendniss stoeren schickt mir dieses bitte der PM und ich verbessere sie dann.

http://felix-kerger.de/downloads/yasm.pdf

Re: yasm

Verfasst: 30. Okt 2011 13:08
von Bug
John_Silver hat geschrieben:Welche Visual Studio nutzt du? Wie hast du es zum laufen bekommen? Wenn ich die Beispielprogramme kompilieren lassen will, bekomme ich nur Fehler ausgegeben.
Ich benutze Visual Studio 2010 Professional (aus der MSDNAA). Meine Lösung, die ich inzwischen gefunden habe (und die vielleicht nicht ganz sauber ist), ist, dass ich ein Visual C++ Projekt mit erstellten Grunddateien rings herum verwende, und einfach die eigentliche Datei, die eine _main enthält, ausschließe und stattdessen eine asm-Datei mit _main-Entrypoint habe.
Im Wesentlichen habe ich es so gemacht, wie in der Anleitung beschrieben, dazu habe ich noch bei den Einstellungen von YASM Assembler in der Rubrik Symbols sozusagen Alias-Namen gesetzt, damit der Code sowohl unter Windows als auch unter Linux ohne große Änderungen ausführbar ist.

Bild