J'écris mon propre bytecode et ma machine virtuelle (sur .NET) et une chose que je n'arrive pas à comprendre est de savoir comment intégrer des chaînes dans mon bytecode. Des idées maintenant comment je devrais le faire?Comment les chaînes sont-elles intégrées dans les fichiers binaires?
Répondre
Apparemment, vous définissez votre propre code d'octet. cela n'a rien à voir avec la syntaxe/grammaire de .NET CIL, non? Si oui, et si vous voulez savoir comment encoder des chaînes (par opposition à d'autres instructions telles que des sauts, des boucles, etc.), vous pouvez simplement inventer votre propre "instruction" pour cela.
Par exemple, le code hexadécimal "01xx" peut être une chaîne contenant xx octets (0 -255). Votre interprète de langage serait alors enseigné pour stocker cette chaîne sur la pile (ou ailleurs) et se déplacer pour décoder le code octet suivant situé xx octets plus bas dans le flux de bytecode.
Si vous le souci est comment mélanger des données de caractères et des données numériques quel que soit le stockage que vous avez pour le bytecode, s'il vous plaît fournir des détails et peut-être quelqu'un peut aider ...
Correct, je fais le mien. Je reçois un peu ce que vous dites, mais l'instruction Ieach dans mon bytecode se compose de 4 octets distincts (1 pour l'opcode et 3 autres, dont le but varie avec l'instruction), et je voudrais éviter d'avoir une longueur variable instructions. Il pourrait être réalisé en toute sécurité en codant la longueur des données dans l'instruction elle-même mais cela le rendrait beaucoup plus complexe ... – RCIX
Je vois les avantages d'avoir le bytecode avec une longueur et un format fixes. Dans ce cas, les chaînes peuvent simplement être implémentées en tant qu'instruction de déclaration de variable (que vous avez facilement conçue) par laquelle l'index (adresse, décalage, indice ...) où la chaîne réelle est stockée. La différence avec une variable régulière est que le stockage où la chaîne réside est initialisé avec la valeur de chaîne. En effet, avec des instructions de 3 octets, vous pouvez vous trouver limité pour d'autres types que les chaînes (par exemple, comment encoder une valeur numérique supérieure à 8 millions?) – mjv
C'est une autre chose que je suis un peu perplexe aussi ... – RCIX
Si vous pouvez enregistrer des numéros dans un tableau, puis vous pouvez stocker des données ASCII dans le même tableau. En ignorant l'idée d'une chaîne en tant que classe, une chaîne simple est juste un tableau de caractères de toute façon - et en C, un octet avec une valeur de 0 indique la fin de la chaîne.
comme une simple preuve de concept en C:
int main()
{
putchar(104); // h
putchar(101); // e
putchar(108); // l
putchar(108); // l
putchar(111); // o
putchar(10); // \n
return 0;
}
Sortie:
$ ./a.out hello
Peut-être un reference on character arrays as strings aiderait?
Ce n'est pas aussi simple que ça: j'essaie d'intégrer des chaînes avec d'autres octets (qui sont des instructions dans mon propre format personnalisé) et je ne sais pas trop comment faire. – RCIX
- 1. Recherche de chaînes dans de gros fichiers binaires
- 2. compresser les binaires dans SVN?
- 3. Validation de structure pour les fichiers binaires
- 4. Comment minimiser les binaires NAnt
- 5. bash: Comment délimiter les chaînes pour trouver les fichiers
- 6. Dans Sql Server, comment convertir des chaînes binaires en binaire?
- 7. Dépendances binaires dans les projets Visual Studio
- 8. SVN et les binaires
- 9. Script de recherche PowerShell qui ignore les fichiers binaires
- 10. Fusion de fichiers binaires
- 11. Énumération de toutes les chaînes dans resx
- 12. détecter des fichiers binaires et des codages de caractères dans les fichiers zip
- 13. Comment comparer les chaînes dans Bourne Shell?
- 14. Comment gérer les chaînes dans VC++?
- 15. Comment utilisez-vous les polices intégrées de gnuplot?
- 16. Les applications Silverlight peuvent-elles être intégrées dans PowerPoint?
- 17. gettext: extraire les chaînes dgettext() aux fichiers domain.po
- 18. Comment remplacer une classe dans les binaires J2ME polonais?
- 19. Convertir des fichiers .class en fichiers binaires?
- 20. Comment différencier les chaînes multilignes avec RSpec?
- 21. Comment concaténer des chaînes avec des valeurs binaires en python?
- 22. Séparer les chaînes CSV
- 23. Comment empêcher Hibernate de couper les chaînes?
- 24. trouver les tables a des données binaires
- 25. SubSonic généré DB Schema, les types binaires?
- 26. Écrire des fichiers binaires en utilisant SAS?
- 27. Quel est le moyen le plus simple d'analyser les fichiers binaires dans Cocoa Touch?
- 28. méthodes pour stocker des fichiers binaires dans SVN
- 29. Architecture d'application appropriée pour l'intégration avec les applications intégrées
- 30. fichiers de verrouillage dans les fenêtres
C'est ce qu'on appelle le bytecode en Java. Dans .NET, c'est CIL, j'ai donc mis à jour vos tags. Avez-vous consulté une référence CIL? –
non, j'écris sur la plate-forme .net un programme qui interprète un tableau d'octets comme ma propre saveur personnalisée de bytecode. – RCIX
Ce que je n'arrive pas à comprendre, c'est comment intégrer autre chose que des nombres dans ce tableau. – RCIX