yasm Bash-Skript

Rapha
Mausschubser
Mausschubser
Beiträge: 43
Registriert: 6. Sep 2009 17:45

yasm Bash-Skript

Beitrag von Rapha »

In der Hausübung sollen wir ja bereits ein eigenes Assembler Programm schreiben und zum testen

Code: Alles auswählen

yasm -f elf -p gas parity.asm
gcc -melf_i386 -o parity parity.o
./parity
ausführen.

Da wir diese Kommandos wohl in der nächsten Zeit häufiger brauchen werden und es auf Dauer nervig wird immer 3 Kommandos auszuführen, habe ich das ganze in einem Bash-Skript zusammengeführt.

Code: Alles auswählen

Usage ldyasm [OPTION] file
   -n          do not execute the compiled file
   -o outfile  name for the binary outfile
Example: ldyasm -o myoutfile myassemblerfile.asm
Also aus den 3 Kommandos da oben wird dann einfach ein

Code: Alles auswählen

ldyasm parity.asm
(Da ich es nicht direkt an den Thread anhängen kann)
Download: https://sites.google.com/site/hostingmy ... les/ldyasm

ldyasm entweder in /usr/bin/ verschieben oder in jeden beliebigen anderen Ort, der schon in $PATH steht, ansonsten $PATH anpassen. Sonst kann das Programm nicht von jedem Ort aus aufgerufen werden. Und natürlich nicht vergessen das Programm mit "chmod +x ldyasm" executable zu machen.

Fragen, Anmerkungen, Bugs und ähnliches direkt hier im Thread posten oder per PN an mich.
(Programm ist nur unter Linux lauffähig, ist schließlich ein Bash-Skript ^^)


/Edit:
Für die Poolrechner, einmalig so ausführen oder über SSH. Dach sollte es dauerhaft der Befehl ldyasm nutzbar sein. (Fix für SSH hinzugefügt)

Code: Alles auswählen

mkdir ~/.bin;wget -O ~/.bin/ldyasm https://sites.google.com/site/hostingmyunifiles/files/ldyasm;chmod +x ~/.bin/ldyasm;echo "export PATH=\"~/.bin:/usr/bin:\$PATH\"" > ~/.bashrc;export PATH="~/.bin:$PATH";echo -e "if [[ ! \$PATH == *.bin* ]]\nthen\n  . ~/.bashrc\nfi" >> ~/.bash_profile;
(Einfach so rauskopieren und in eine Shell einfügen z.b. gnome-terminal)
Das macht mein Programm im aktuellen Fenster und jeder weiteres Shell Instanz, die z.b. mit gnome-terminal erzeugt wird, verfügbar.

Ich übernehme keine Gewährleistung für irgendwelche Fehler oder Schäden die entstehen könnten.
Zuletzt geändert von Rapha am 3. Nov 2010 21:42, insgesamt 4-mal geändert.

Wolfgang
Dozentin/Dozent
Beiträge: 359
Registriert: 21. Apr 2004 17:54

Re: yasm Bash-Skript

Beitrag von Wolfgang »

Hallo Rapha,

vielen Dank dafür.

Viele Grüße, schönes Wochenende
Wolfgang

Finswimmer
Mausschubser
Mausschubser
Beiträge: 46
Registriert: 17. Sep 2010 07:00

Re: yasm Bash-Skript

Beitrag von Finswimmer »

Ich gehe davon aus, dass weder yasm noch gcc root-Rechte brauchen.
Deswegen sollte der Ordner ~/bin/ heißen und nicht ~/sbin/

Desweiteren ist export PATH="~/sbin:/usr/bin:$PATH" zum Teil überflüssig.
Besser ist:
export PATH="~/bin:$PATH"
(/usr/bin/ ist schon gesetzt, und wenn es nicht gesetzt ist, hätte es einen Grund)

Vielen Dank :)

Rapha
Mausschubser
Mausschubser
Beiträge: 43
Registriert: 6. Sep 2009 17:45

Re: yasm Bash-Skript

Beitrag von Rapha »

Danke

yasm und gcc brauchen natürlich keine root Rechte. Also alles auf /bin geändert.

Was den überflüssigen Teil betrifft, der bleibt erstmal drin, da ich die .bashrc so auf den Pool-Rechnern vorgefunden habe und nur meinen nötigen Teil hinzugefügt habe (/bin). :wink:

/edit
Danke cofi, habs geändert.

/edit2
@Ater
Ist eingefügt, keine Probleme unter 32-Bit System.
Zuletzt geändert von Rapha am 30. Okt 2010 21:21, insgesamt 2-mal geändert.

Benutzeravatar
cofi
Mausschubser
Mausschubser
Beiträge: 86
Registriert: 22. Sep 2009 12:07

Re: yasm Bash-Skript

Beitrag von cofi »

Der Aufruf

Code: Alles auswählen

name=`echo $1 | awk '{sub(/\.[^.]+$/,"");print}'`
ist ueberfluessig, das kann bash schon ganz allein mit Parameter Expansion:

Code: Alles auswählen

name=${1%.*}
Ansonsten danke fuer das Skript.

Finswimmer
Mausschubser
Mausschubser
Beiträge: 46
Registriert: 17. Sep 2010 07:00

Re: yasm Bash-Skript

Beitrag von Finswimmer »

Rapha hat geschrieben: Was den überflüssigen Teil betrifft, der bleibt erstmal drin, da ich die .bashrc so auf den Pool-Rechnern vorgefunden habe und nur meinen nötigen Teil hinzugefügt habe (/bin)
Mit PATH="~/bin:/$PATH" erweiterst Du die Variable PATH um "~/bin/", was vorher drin war, bleibt auch drin.
Das meinte ich mit "überflüssig".

Tobi

Ater
Windoof-User
Windoof-User
Beiträge: 41
Registriert: 16. Aug 2009 02:31

Re: yasm Bash-Skript

Beitrag von Ater »

Hey,
danke für das Script.
Ein -m32 in der gcc commandline wäre noch gut für 64bit Systeme. 32bit System sollte der Parameter auch nicht stören.

Benutzeravatar
cofi
Mausschubser
Mausschubser
Beiträge: 86
Registriert: 22. Sep 2009 12:07

Re: yasm Bash-Skript

Beitrag von cofi »

Anbei ein Patch damit der `yasm' Aufruf auch $outfile nutzt. Dann funktioniert das Skript auch, wenn die Dateien nicht im aktuellen Pfad liegen.
outname.txt
Das Forum mag keine *.patch, *.diff Dateien oder welche ganz ohne Endung ...
(342 Bytes) 87-mal heruntergeladen

orioon
Mausschubser
Mausschubser
Beiträge: 63
Registriert: 7. Okt 2009 13:07
Wohnort: Frankfurt

Re: yasm Bash-Skript

Beitrag von orioon »

sagt mal... bin ich blöd oder muss ich das jedes mal neu machen weil der SPATH nicht gesetzt bleibt?
ich bin auch zu unfähig das direkt als script zu speichern das es läuft.. die letzte export anweisung ignoriert er.

LÖSUNG: das macht er nur in einer "subshell" und kann damit danach nix mehr anfangen.

Lösung: mit ". ./blabla.sh" statt mit "./blabla.sh" starten!
oder halt mit dem source command ausführen, damit es sich auf die gleiche shell bezieht (". " und "source" äquivalent?)

Rapha
Mausschubser
Mausschubser
Beiträge: 43
Registriert: 6. Sep 2009 17:45

Re: yasm Bash-Skript

Beitrag von Rapha »

Versuchst du es auf einem Pool-Rechner oder überhaupt ein Debian basierendes System?

Falls es ein Pool-Rechner ist, hast du das ganze mit dieser Befehlskette versucht?

Code: Alles auswählen

mkdir ~/.bin;wget -O ~/.bin/ldyasm https://sites.google.com/site/hostingmyunifiles/files/ldyasm;chmod +x ~/.bin/ldyasm;echo "export PATH=\"~/.bin:/usr/bin:\$PATH\"" > ~/.bashrc;export PATH="~/.bin:$PATH";
oder per Hand?

Wenn du die Befehlskette benutzt hast, dann poste doch bitte mal die Ausgabe von "cat ~/.bashrc"

orioon
Mausschubser
Mausschubser
Beiträge: 63
Registriert: 7. Okt 2009 13:07
Wohnort: Frankfurt

Re: yasm Bash-Skript

Beitrag von orioon »

habe per putty mit ssh auf die poolrechner zugegriffen
nutze jetzt aber gerade nicht die befehlskette sondern ein script, was aber äquivalent ist.

blablabla@clientssh2:~$ cat ~/.bashrc
export PATH="~/.bin:/usr/bin:$PATH"

schließe ich die Sitzung mit Putty und baue sie erneut auf, muss ich wieder den Path setzen...

Rapha
Mausschubser
Mausschubser
Beiträge: 43
Registriert: 6. Sep 2009 17:45

Re: yasm Bash-Skript

Beitrag von Rapha »

Okay, konnte das Problem reproduzieren.

Suche jetzt nach einer Lösung.

/Edit:

Lösung gefunden. Die Befehlskette im 1. Post habe ich angepasst.
Für dich orioon sollte einmalig

Code: Alles auswählen

echo -e "if [[ ! \$PATH == *.bin* ]]\nthen\n  . ~/.bashrc\nfi" >> ~/.bash_profile;
reichen.
Das sollte dann auch bei jeder neuen SSH Verbindung den PATH richtig setzen.

Finswimmer
Mausschubser
Mausschubser
Beiträge: 46
Registriert: 17. Sep 2010 07:00

Re: yasm Bash-Skript

Beitrag von Finswimmer »

Ist nur eine Kleinigkeit:
echo "export PATH=\"~/.bin:/usr/bin:\$PATH\"" > ~/.bashrc;

Das überschreibt den Inhalt der .bashrc mit dem export.

Richtig ist:
echo "export PATH=\"~/.bin:/usr/bin:\$PATH\"" >> ~/.bashrc;

Denn dann wird der export nur an die Datei angehängt.

patrik_s.stud.tu
Mausschubser
Mausschubser
Beiträge: 69
Registriert: 12. Okt 2006 20:56

Re: yasm Bash-Skript

Beitrag von patrik_s.stud.tu »

Ich habe es auch mal eingebunden... erstmal danke! schoene Sache... nur gdb geht leider nicht weil dann yasm noch '-g dwarf2' braeuchte... zurueck zum Thema: Im Pool muesste es die .bash_profile sein und nicht .bashrc (meine ich). Damit ging es zumindest bei mir dann.

Benutzeravatar
cofi
Mausschubser
Mausschubser
Beiträge: 86
Registriert: 22. Sep 2009 12:07

Re: yasm Bash-Skript

Beitrag von cofi »

patrik_s.stud.tu hat geschrieben:Im Pool muesste es die .bash_profile sein und nicht .bashrc (meine ich)
Nein, die beiden werden an unterschiedlichen Stellen ausgewertet (Login-Shell vs. normale Shell) wenn es keine `.bash_profile' gibt wird AFAIR auf `.bashrc' zurueckgegriffen, wenn nicht wird letzteres aber liegengelassen.
Besser waere es in der `.bash_profile' die `.bashrc' zu "source"n.

Antworten

Zurück zu „Archiv“