Il lavoro di reverse engineering ho fatto su questo non includono dichiarando i propri tipi generici, anche se è molto probabile possibile.
I riferimenti al tipo generico dichiarante (senza parametri) (Vettore) vengono effettuati tramite un nome qualificato normale (sebbene qualsiasi multiname dovrebbe fare).
I riferimenti a un tipo generico digitato (Vettore < int> contrapposto a Vector. <>) sono creati da un nuovo tipo di multiname (0x1D), che io chiamo GenericName. GenericName ha un formato in questo modo:
[Kind] [TypeDefinition] [ParamCount] [Param1] [Param2] [ParamN]
Dove:
- [TypeDefinition] è un U30 nella tabella multiname
- [ParamCount] è un U8 (U30?) Di come molti parametri di tipo ci sono
- [ParamX] è un U30 nella tabella multiname.
Ovviamente i farmaci generici non sono generalmente ancora supportato, in modo ParamCount sarà sempre 1 (per vettore. < *>).
L'altra cosa interessante è come vengono create le istanze della classe. È stato aggiunto un nuovo codice operativo in Flash 10 (0x53), che chiamerò MakeGenericType. MakeGenericType è dichiarata con il seguente stack:
TypeDefinition, ParameterType1, ParameterTypeN -> GenericType
Essa ha anche un parametro, un U8 (U30?) Specificando il numero di parametri sono in pila. È generalmente vedere MakeGenericType in uso in questo modo:
GetLex [TypeDefinitionMultiname]
GetLex [ParameterTypeMultiname]
MakeGeneric [ParamCount]
Coerce [GenericNameMultiname]
Construct [ConstructorParamCount]
Quindi, se si ha la seguente ...
GetLex __AS3__.vec::Vector
GetLex int
MakeGeneric 1
Coerce __AS3__.vec::Vector.<int>
Construct 0
Si dovrebbe ora avere un'istanza di vettore. < int>
fonte
2009-02-16 14:24:49
Mi piace molto conoscere gli interni di as3/avm2. Grazie per aver condiviso questo! – yuku
Sei meraviglioso. Grazie. –
Ecco un link a un PDF con codici 0x35-0x38, 0x3a-0x3e, 0x50-0x52 - questi erano nuovi per il progetto "alchemy". So che 0x39 esiste e sembra consumare un valore intero fuori dallo stack, ma non so cosa potrebbe fare. Link: http://llvm.org/devmtg/2008-08/Petersen_FlashCCompiler.pdf –