weiss jemand wie das geht?
mbG
R.
> weiss jemand wie das geht?
Naja, ich weiß zwar nicht, was das soll, und hab's gerad' auch
nicht getestet, aber wie wär's damit:
call @m1
@m1: pop eax
...
Gruss
Jan Bruns
> Hi Leute,
>
> weiss jemand wie das geht?
>
call a
a: pop eax
> mbG
>
> R.
--
Gruß,
Sebastian
> Naja, ich weiß zwar nicht, was das soll, und hab's gerad' auch
> nicht getestet, aber wie wär's damit:
>
> call @m1
> @m1: pop eax
> ...
Ist wohl nicht so optimal da es den internen return-stack
durcheinander bringt. Aber die Adresse ist doch zur
Kompilierzeit bekannt:
lea a,%eax
a:
Wenn man das einmal macht, ist es wohl egal. Ansonsten kann man auch
direkt mit esp arbeiten.
> Aber die Adresse ist doch zur
> Kompilierzeit bekannt:
>
> lea a,%eax
> a:
Üblicherweise macht man so etwas um "position-independent-code" zu
schreiben, also genau dann, wenn die Adresse vorher nicht bekannt ist.
--
Gruß,
Sebastian
>> Naja, ich weiß zwar nicht, was das soll, und hab's gerad' auch
>> nicht getestet, aber wie wär's damit:
>>
>> call @m1
>> @m1: pop eax
>> ...
>
> Ist wohl nicht so optimal da es den internen return-stack
> durcheinander bringt.
Ja, deswegen ist ein Unterprogrammaufruf nach
movl (%esp), %eax
ret
meist vorteilhafter.
(Und es wird in der Tat um position independent code gehen, IA32 hat
leider keine IP-relative Adressierung für Daten.)
> (Und es wird in der Tat um position independent code gehen, IA32 hat
> leider keine IP-relative Adressierung für Daten.)
Wie schon andere geschrieben haben:
Üblicher ist es, zum Relozieren von Code einfach alle CS-
Referenzen anzupassen. Von daher wär's schon mal interessant,
wenn "Plagus" mal berichten würde, was das soll.
Gruss
Jan Bruns
http://en.wikipedia.org/wiki/Position_independent_code
> Von daher wär's schon mal interessant,
> wenn "Plagus" mal berichten würde, was das soll.
Vielleicht ist es auch nur eine Hausaufgabe.
--
Gruß,
Sebastian
>> Von daher wär's schon mal interessant, wenn "Plagus" mal berichten
>> würde, was das soll.
>
> Vielleicht ist es auch nur eine Hausaufgabe.
... oder der Versuch, etwas "nicht ganz koscheres" zu machen. Deshalb
beantworte ich solche Aufgaben grundsätzlich nicht. Entweder der Poster
ist clever genug, sich die (relativ leicht zu beschaffenden) Information
selbst zu holen, oder er hat Pech.
Es gab in den MS Newsgruppen nach dem Sony/BMG
Kopierschutz-"Rootkit"-Debakel man eine längere Diskussion, in wiefern
man Leuten helfen sollte, die "suspekte" Fragen stellen. Die Macher des
Kits hatten nämlich vorher auch dort gefragt und bereitwillig Hilfe
erfahren. Manchmal sollte man halt nachdenken, ob es wirklich gut ist,
eine Antwort zu geben.
So, da OT: fup2p.
Gruß,
Spiro.
--
Spiro R. Trikaliotis http://cbm4win.sf.net/
http://www.trikaliotis.net/ http://www.viceteam.org/
das ist super nett, dass so viele von euch meine Frage beantwortet
haben. Die, die schon gedacht haben, dass hier was faul sei, moechte ich
beruhigen ;) Ich bin halt erst im ersten Semester eines
Informatikstudiums und wusste mit einer Aufgabe nicht weiter. Wie es
sich rausstellte war diese auch nicht so schwer und bevor ich die
Antworten von euch gelesen habe wurde sie so geloest:
Programmzaehler ins %eax kopieren:
push %eip
pop %eax
Danke nochmalls
Gruss
Plagus
"push %eip" ist aber keine gültige x86-Anweisung, höchstens ein Alias
auf ein "call" auf die nächste Adresse.
> Gruss
> Plagus
--
Gruß,
Sebastian
>> (Und es wird in der Tat um position independent code gehen, IA32 hat
>> leider keine IP-relative Adressierung für Daten.)
>
> Wie schon andere geschrieben haben:
> Üblicher ist es, zum Relozieren von Code einfach alle CS-
> Referenzen anzupassen.
Nö, ELF arbeitet nun einmal anders und erfreut sich einer gewissen
Verbreitung.
Ich persönlich würde es mit
call $+2
pop eax
was ja in Abgewandelter Form schon mehrmals vorgeschlagen wurde,
probieren ($ ist die momentane Stelle in diesem Abschnitt vor diesem
Befehl. $$ ist der Anfang dieses Abschnittes.) Sollte der Opcode von
call doch länger sein als zwei Byte, muss man das natürlich entsprechend
anpassen.
--
To err is human. To forgive is divine.
To forget is also human...