2009-11-17 5 views
3

Lors de la lecture de Java Security, j'ai trouvé les phrases ci-dessous, mais je n'ai pas trouvé d'explication satisfaisante sur Internet. Quelqu'un peut-il expliquer s'il vous plaîtQu'est-ce que le code ILLegal Byte?

  • empêche le chargement des classes avec bytecode
  • empêche le chargement des colis illégaux dans

Répondre

3

Nous ne pouvons cependant pas être sûrs que la classe elle-même est sûre. Il y a toujours le filet de sécurité de SecurityManager qui empêchera la classe d'accéder à des ressources protégées telles que le réseau et le disque dur local, mais cela en soi n'est pas suffisant. La classe peut contenir un bytecode illégal, forger des pointeurs vers la mémoire protégée, déborder ou déborder la pile du programme, ou corrompre d'une autre manière l'intégrité de la JVM. Vérifiez Sujet Le fichier de classe Verifier dans [1]: http://medialab.di.unipi.it/doc/JNetSec/jns_ch5.htm

+0

Le lien était très utile. – Geek

0

Le code source est compilé en bytecode, qui est distribué aux utilisateurs. Si le bytecode a été endommagé ou n'a pas été créé par un compilateur java, alors il peut être illégal, ce qui signifie que les octets n'ont pas de sens.

2

Le byte code verifier fait les vérifications suivantes:

  • Les branches doivent être dans les limites du tableau de code pour la méthode.
  • Les cibles de toutes les instructions de flux de contrôle sont chacune le début d'une instruction. Dans le cas d'une instruction large, l'opcode large est considéré comme le début de l'instruction, et l'opcode donnant l'opération modifiée par cette instruction large n'est pas considéré comme commençant une instruction. Les branches au milieu d'une instruction sont interdites.
  • Aucune instruction ne peut accéder ou modifier une variable locale à un index supérieur ou égal au nombre de variables locales que sa méthode indique qu'elle alloue.
  • Toutes les références au pool de constantes doivent correspondre à une entrée du type approprié. Par exemple: l'instruction ldc ne peut être utilisée que pour les données de type int ou float ou pour les instances de classe String; l'instruction getfield doit référencer un champ.
  • Le code ne se termine pas au milieu d'une instruction.
  • L'exécution ne peut pas tomber à la fin du code.
  • Pour chaque gestionnaire d'exceptions, le point de départ et de fin du code protégé par le gestionnaire doit être au début d'une instruction ou, dans le cas du point de fin, immédiatement après la fin du code. Le point de départ doit être avant le point final. - Le code du gestionnaire d'exceptions doit commencer par une instruction valide, et il ne peut pas commencer par un opcode en cours de modification par l'instruction large.