Nous avons fait une extension de Zend que nous voulons écrire les adresses de l'écho de zval est censé écrire, mais nous ne pouvons pas comprendre comment les recevoir car nous avons remarqué qu'il y a une différence entre écho "test"; et $ a = "test"; echo $ a; Comment obtenir les arguments, peu importe s'il s'agit d'une variable ou non?Extension Zend, obtenez des arguments d'écho?
Répondre
Le gestionnaire d'écho est
static int ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_op *opline = EX(opline);
zval z_copy;
zval *z = &opline->op1.u.constant;
if (IS_CONST != IS_CONST &&
Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL &&
zend_std_cast_object_tostring(z, &z_copy, IS_STRING TSRMLS_CC) == SUCCESS) {
zend_print_variable(&z_copy);
zval_dtor(&z_copy);
} else {
zend_print_variable(z);
}
ZEND_VM_NEXT_OPCODE();
}
de Zend/zend_vm_execute.h
, et comme vous pouvez voir tout ce qu'il fait essentiellement est d'appeler zend_print_variable()
.
Accrocher cette fonction et vous devriez être sur la bonne voie.
Bonus: cela fonctionne également pour les instructions print
.
Maintenant, je commence à me perdre dans le code Zend, j'utilise zend_set_user_opcode_handler (ZEND_ECHO, echo_handler); méthode de hook sur écho, qui est déclenchée à chaque fois comme prévu, mais le opline-> op1.op_type est 4 (IS_VAR) et ce qui signifie que op1.u.contant ne tiendra pas le zval avec la valeur, mais je découvre comment l'extraire de execute_data ... Existe-t-il une documentation disponible pour la structure de execute_data en plus du code source? –
EDIT: Je n'arrive pas à comprendre comment extraire le zval de execute_data, quand op1.op_type est IS_VAR –
Je suis toujours perdu:/Le gestionnaire auquel vous faites référence est seulement pour quand op1.optype est IS_CONST, mais le ZEND_ECHO_SPEC_VAR_HANDLER utilise une autre façon d'accéder au zval de l'écho, cependant si j'utilise la même approche que ZEND_ECHO_SPEC_VAR_HANDLER, il essaie d'accéder à certaines données "aléatoires", car le pointeur semble être non défini/jamais défini. Est-il possible de se connecter directement au ZEND_ECHO_SPEC_VAR_HANDLER plutôt qu'à un opcode echo? –
- 1. PHP extension avec des arguments inconnus
- 2. Obtenez des valeurs Cookie avec Zend Framework
- 3. passer des arguments à zend partial et zend partialLoop
- 4. Extension Helper Voir Zend Placeholder
- 5. Obtenez l'URL et enregistrez-le | Chrome Extension
- 6. Obtenez les données du poste, Zend Framework
- 7. Google YouTube Zend - Obtenez l'utilisateur authenicated
- 8. arguments passant Python C Extension par référence
- 9. suhosin patch ou extension et optimiseur zend
- 10. Obtenez le texte, comptez le, surlignez le texte. extension Chrome
- 11. Obtenez Nom du fichier sans extension en Python
- 12. Système de type extension pour un projet Zend Framework
- 13. Extension de fichier pour les mises en page Zend Framework
- 14. Extension OpenGL glBufferData attend 2 istead de 4 arguments
- 15. Extension de classe Zend_Controller_Action, non trouvée par Zend Tool
- 16. Zend: obtenez les paramètres régionaux du code pays
- 17. Obtenez tous les détails du modèle dans zend
- 18. Obtenez toutes les données de session dans zend 1.12
- 19. Obtenez les éléments avec le même nom zend framework
- 20. comment obtenez-vous des données C++ Intellisense dans une extension Studio visuelle?
- 21. applications extension Adaptateur vs extension BaseAdapter
- 22. Mélanger des chaînes statiques avec des arguments Arguments
- 23. Obtenez des contrôles MDIChild
- 24. Contournement des arguments génériques et dynamiques
- 25. Extension Ext.data.Store
- 26. UIButton avec des arguments
- 27. Gestion des arguments d'objet
- 28. setTimeout avec des arguments
- 29. Transférer des arguments variables
- 30. Répétition des arguments d'impression
Voir ma réponse. Bien que cela devrait fonctionner, je me demande pourquoi vous en avez besoin? Peut-être que vous prenez la mauvaise approche, ou la bonne approche du mauvais problème. – Flavius
Eh bien, Nous essayons d'implémenter une sorte d'altération dans un module, et notre approche est la suivante (pour un TRÈS SIMPLE) 1. Au démarrage de l'exécution, obtenir l'adresse des zvals pour les éléments $ _GET (DONE) 2 Sur écho, obtenez l'adresse de l'adresse du zval en écho et vérifiez si c'est l'un des zvals de _GET. (NON FAIT - Avoir le crochet sur l'écho) Est-ce que cela semble légitime? –
Oui, c'est le cas, pour une teinture TRES SIMPLE, comme vous l'avez dit - ma solution devrait fonctionner. Dans mon (petit) temps libre, je travaille sur quelque chose en rapport: une extension qui va permettre aux scripts php d'utiliser des fonctions d'analyse de code statique, ce qui peut être intéressant pour vous aussi. – Flavius