Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

25.10.2015, 19:21

Wie benutzt man "stloc / ldloc"-Opcode in dnlib richtig?

Hi, ich habe eine Frage, worauf ich sonst im Internet wirklich keine Antwort bekommen hab.
Wenn ich dnlib benutze kann ich den IL Code von Methoden verändern. Lokale Variablen laden und speichern funktioniert mit den OpCodes Ldloc und Stloc

Meine Frage: Wenn ich etwas in der ersten lokalen Variable speichern will gibt es den vorgefertigen OpCode "Stloc_0". Aber es gibt z.b kein "Stloc_4" wenn ich also einen Wert in der vierten lokalen Variable speichern will/muss dann kann ich "Stloc" oder "Stloc_S" benutzen. Das Problem: Beide nehmen keine Operanden an! Wen ich als Operand eine 4 angebe kommt eine Fehlermeldung: "OpCode does not have an int32 operand"

Weiß vielleicht jemand wie man dieses Problem lösen kann?

mfg

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

25.10.2015, 23:32

Laut MSDN arbeiten die Funktionen mit einem Stack. Stloc_S läd den aktuellen Wert vom Stack in die lokale Variable mit der übergebenen Nummer. Stloc_0 - Stloc_3 sind einfach Abkürzungen für die ersten 4, die ohne Parameter auskommen.

Wenn du also einen Wert in eine lokale Variable laden möchtest, muss dieser vorher mit ldloc aus einer lokalen Variable oder eine Konstante mit ldind* auf den Stack gepackt worden sein.

Der Fehler mit dem int32 liegt daran das Stloc_S ein uint16 als index nimmt.