Ich versuche, etwas über die Assemblersprache zu lernen, indem ich die Anweisungen in einigen gemeinsamen Objekten studiere. Ich habe eine Konstruktion angetroffen, wo eine call
Anweisung nach seinem Anfang bis zu 1 Byte führt, zum Beispiel (Ausgabe von hte
):Wie kann dieser umgelagerte Anruf decodiert werden?
af6fc | e8fcffffff call af6fdh
Klar, dass die Zieladresse muss durch eine geeignete Funktion ersetzt werden (was ich in diesem Fall wissen ist strcmp
). Ich finde das seltsam, denn in anderen Teilen des gleichen gemeinsame Objekts der gleichestrcmp
Funktion des .got
/.plt
Mechanismus die Notwendigkeit aufgerufen wird eliminiert Teile .text
neu zu schreiben. Im letzteren Fall kann die Zielfunktion durch Studieren der Tabelle .rel.plt
zusammen mit .dynsym
identifiziert werden. Aber wie finde ich, wo die unmittelbare Adresse in ersterem umgeleitet wird? Ich konnte kein Vorkommen der Adressen af6fc
oder af6fd
in irgendeinem der Abschnitte finden, zumindest nicht in denen, die durch hte
zugänglich gemacht werden.