Ich versuche den Op-Code für einen einfachen Code zu verstehen.
Der Code lautet:
%Vor%Der Op-Code für den obigen Code lautet:
%Vor%Ich versuche zu verstehen, was in Zeile 7 passiert, wie wird die Auswertung durchgeführt? Wie viele Werte gibt es im Ausdruck von if für die Auswertung ein? Es gibt 3 Werte ein, oder es gibt die 2 Werte den Wert von $ a und den Wert von $ b ein und der Ausdruck aus den Klammern von if wird danach ausgewertet?
Ich habe das Handbuch für JMPZ_EX gelesen, ich habe verstanden, was passiert in der Op-Code bis Schritt 2 danach ist ein wenig durcheinander und es ist sehr schwer für mich zu verstehen, was sind die genauen Schritte, die PHP tut.
Eine weitere Sache, die ich verstehen muss, ist, was sind alle Zweige im Op-Code, welche von allen Verzweigungen werden am Ende verwendet?
Wenn Sie nicht ASM beherrschen, denke ich, dass es am einfachsten ist, den gleichen Code zu betrachten durch Lesen seiner (fast) 1: 1-Darstellung in PHP:
%Vor% Die Zwischendarstellung basiert auf den Negationen Ihrer tatsächlichen Klauseln, um einen Sprung über den im if
-Block enthaltenen Code zu machen.
Wenn Sie wirklich verstehen wollen, wie PHP seine Eingabe in dieses Opcode-Array umwandelt, müssen Sie sich mit den Interna von PHP vertraut machen, aber nicht vor dem
Der Rest der Opcodes sind "Hintergrundrauschen", Zwischenwerte oder sogar eine Anweisung, die keinen Sinn macht 9 6 > JMP ->7
, die wahrscheinlich existiert, weil es keinen Sinn macht, den PHP-Parser auszuspucken das optimalste Opcode-Array für das ZendVM von.
Geht nach den Zeilennummern #
%Vor%JMPZ bedeutet, zum Code zu springen, wenn der Wert 0 ist. Ich bin nicht sicher, dass der spezifische Unterschied von JMPZ_EX so aussieht, als ob es die Rückgabe eines booleschen Ergebnisses erlaubt.
Also:
%Vor%Einige Anmerkungen: