2 assembly simple-assembly.exe
4 #table schema major version
5 valid offset cli-metadata + read.uint ( stream-header ( 0 ) ) + 4 set-byte 2
6 valid offset tables-header + 4 set-byte 2
9 invalid offset tables-header + 4 set-byte 22
10 invalid offset tables-header + 5 set-byte 1
13 invalid offset stream-header ( 0 ) + 4 set-uint 23
16 #LAMEIMPL MS ignore garbage on the upper bits.
17 invalid offset tables-header + 6 set-byte 0x8
18 invalid offset tables-header + 6 set-byte 0x10
19 invalid offset tables-header + 6 set-byte 0xF
22 #ECMA-335 defines 39 tables, the empty slows are the following:
23 # MS Extensions: 0x3 0x5 0x7 0x13 0x16
24 # Unused: 0x1E 0x1F 0x2D-0x3F
25 # We don't care about the MS extensions.
27 invalid offset tables-header + 8 set-bit 0x3
28 invalid offset tables-header + 8 set-bit 0x5
29 invalid offset tables-header + 8 set-bit 0x7
30 invalid offset tables-header + 8 set-bit 0x13
31 invalid offset tables-header + 8 set-bit 0x16
33 invalid offset tables-header + 8 set-bit 0x1E
34 invalid offset tables-header + 8 set-bit 0x1F
36 invalid offset tables-header + 8 set-bit 0x2D
37 invalid offset tables-header + 8 set-bit 0x2F
38 invalid offset tables-header + 8 set-bit 0x30
39 invalid offset tables-header + 8 set-bit 0x35
40 invalid offset tables-header + 8 set-bit 0x38
41 invalid offset tables-header + 8 set-bit 0x3F
43 #simple-assembly.exe feature 6 tables (modules, typeref, typedef, method, assembly and assemblyref)
44 #This means that there must be 24 + 6 *4 bytes to hold the schemata + rows -> 48 bytes
47 invalid offset stream-header ( 0 ) + 4 set-uint 24
48 invalid offset stream-header ( 0 ) + 4 set-uint 33
49 invalid offset stream-header ( 0 ) + 4 set-uint 39
50 invalid offset stream-header ( 0 ) + 4 set-uint 44
51 invalid offset stream-header ( 0 ) + 4 set-uint 47
53 #total size of the tables
54 invalid offset stream-header ( 0 ) + 4 set-uint 60
55 invalid offset stream-header ( 0 ) + 4 set-uint 93
59 assembly simple-assembly.exe
62 valid offset table-row ( 0 0 ) set-ushort 0
63 #FALESPEC this field is ignored
64 valid offset table-row ( 0 0 ) set-ushort 9999
67 valid offset tables-header + 24 set-uint 1
68 invalid offset tables-header + 24 set-uint 0
69 invalid offset tables-header + 24 set-uint 2 , offset tables-header + 32 set-uint 1
73 invalid offset table-row ( 0 0 ) + 2 set-ushort 0x8888
74 #point to an empty string
75 invalid offset table-row ( 0 0 ) + 2 set-ushort 0
78 invalid offset table-row ( 0 0 ) + 4 set-ushort 0x8888
81 invalid offset table-row ( 0 0 ) + 6 set-ushort 0x8888
84 invalid offset table-row ( 0 0 ) + 8 set-ushort 0x8888
89 assembly simple-assembly.exe
93 #all table indexes are valid
95 invalid offset table-row ( 1 0 ) set-ushort 0x8000
98 invalid offset table-row ( 1 0 ) set-ushort 0x8001
101 invalid offset table-row ( 1 0 ) set-ushort 0x8002
104 invalid offset table-row ( 1 0 ) set-ushort 0x8003
107 invalid offset table-row ( 1 0 ) + 2 set-ushort 0
110 invalid offset table-row ( 1 0 ) + 2 set-ushort 0x8080
113 invalid offset table-row ( 1 0 ) + 4 set-ushort 0x8080
117 assembly simple-assembly.exe
120 valid offset tables-header + 32 set-uint 2
121 invalid offset tables-header + 32 set-uint 0
123 #This part of the test suite only verifies structural properties, not table relationships
125 #Flags invalid bits: 6,9,14,15,19,21,24-31
126 invalid offset table-row ( 2 1 ) set-bit 6
127 invalid offset table-row ( 2 1 ) set-bit 9
128 invalid offset table-row ( 2 1 ) set-bit 14
129 invalid offset table-row ( 2 1 ) set-bit 15
130 invalid offset table-row ( 2 1 ) set-bit 19
131 invalid offset table-row ( 2 1 ) set-bit 21
132 invalid offset table-row ( 2 1 ) set-bit 24
133 invalid offset table-row ( 2 1 ) set-bit 25
134 invalid offset table-row ( 2 1 ) set-bit 26
135 invalid offset table-row ( 2 1 ) set-bit 27
136 invalid offset table-row ( 2 1 ) set-bit 28
137 invalid offset table-row ( 2 1 ) set-bit 29
138 invalid offset table-row ( 2 1 ) set-bit 30
139 invalid offset table-row ( 2 1 ) set-bit 31
141 #invalid class layout
142 invalid offset table-row ( 2 1 ) or-uint 0x18
144 #invalid StringFormatMask - mono doesn't support CustomFormatMask
145 invalid offset table-row ( 2 1 ) or-uint 0x30000
147 #CustomStringFormatMask must be zero
148 invalid offset table-row ( 2 1 ) or-uint 0xC00000
150 #We ignore all validation requited by HasSecurity
153 invalid offset table-row ( 2 1 ) + 4 set-ushort 0
154 invalid offset table-row ( 2 1 ) + 4 set-ushort 0x9999
157 invalid offset table-row ( 2 1 ) + 6 set-ushort 0x9999
159 #Extends is a TypeDefOrRef coded token (uses 2 bits to code typedef, typeref and typespec)
161 invalid offset table-row ( 2 1 ) + 8 set-ushort 0x33003
163 #null token (except system.obj, <module> and interfaces)
164 invalid offset table-row ( 2 1 ) + 8 set-ushort 0x0
165 invalid offset table-row ( 2 1 ) + 8 set-ushort 0x01
166 invalid offset table-row ( 2 1 ) + 8 set-ushort 0x02
168 #make type 1 an inteface but let it remain extending something
169 invalid offset table-row ( 2 1 ) or-uint 0x20
170 #interface must extend nothing
171 valid offset table-row ( 2 1 ) or-uint 0xA0 , offset table-row ( 2 1 ) + 8 set-ushort 0x0
173 #interface must be abstract
174 invalid offset table-row ( 2 1 ) or-uint 0x20 , offset table-row ( 2 1 ) + 8 set-ushort 0x0
176 #TODO add a test for sys.obj (we should test for mscorlib as well)
178 valid offset table-row ( 2 0 ) + 8 set-ushort 0
179 #make <module> extend the first typeref entry, which usually is sys.obj
180 #LAMEIMPL MS ignores if <module> extend something.
181 invalid offset table-row ( 2 0 ) + 8 set-ushort 0x5
184 typedef-table-field-list {
185 assembly assembly-with-complex-type.exe
187 valid offset table-row ( 2 1 ) + 10 set-ushort 1
190 invalid offset table-row ( 2 1 ) + 10 set-ushort 999
192 #this type is bigger than the next
193 invalid offset table-row ( 2 1 ) + 10 set-ushort 4
196 invalid offset table-row ( 2 0 ) + 10 set-ushort 0
200 typedef-table-method-list {
201 assembly assembly-with-complex-type.exe
203 valid offset table-row ( 2 1 ) + 12 set-ushort 1
206 invalid offset table-row ( 2 1 ) + 12 set-ushort 999
208 #this type is bigger than the next
209 invalid offset table-row ( 2 1 ) + 12 set-ushort 5
212 invalid offset table-row ( 2 0 ) + 12 set-ushort 0
217 assembly assembly-with-complex-type.exe
219 #This tests only verify basic structural properties, they don't verify relationship between tables
222 #invalid bits 11, 14 (4)
223 invalid offset table-row ( 4 1 ) set-bit 3
224 invalid offset table-row ( 4 1 ) set-bit 11
225 invalid offset table-row ( 4 1 ) set-bit 14
227 #invalid visibility (5)
228 invalid offset table-row ( 4 0 ) or-ushort 0x7
230 #field with initonly and literal (6)
231 invalid offset table-row ( 4 0 ) or-ushort 0x60
233 #field with literal must be static (7)
234 valid offset table-row ( 4 4 ) or-ushort 0x50
235 invalid offset table-row ( 4 0 ) or-ushort 0x40
237 #field with rt special name must have special name (8)
239 valid offset table-row ( 4 0 ) or-ushort 0x0200
240 #special name + rt special name
242 #LAMEIMPL MS requires that fields marked rtspecialname to be named value__ even if they are not enums
243 valid offset table-row ( 4 0 ) or-ushort 0x0600
244 #only rt special name
245 invalid offset table-row ( 4 0 ) or-ushort 0x0400
247 #no row in the field marshal table for field 0 (9)
248 invalid offset table-row ( 4 0 ) or-ushort 0x1000
250 #no row in the constant table for field 0 (10)
251 invalid offset table-row ( 4 0 ) or-ushort 0x8000
253 #no row in the field rva table for field 0 (11)
254 invalid offset table-row ( 4 0 ) or-ushort 0x0100
256 #name can't be empty or invalid (12)
257 invalid offset table-row ( 4 1 ) + 2 set-ushort 0
258 invalid offset table-row ( 4 1 ) + 2 set-ushort 0x9999
261 invalid offset table-row ( 4 1 ) + 4 set-ushort 0x4666
263 #if it's a global variable, it must be static and (public|compiler controler|private) (16)
264 #static + compiler controled
265 valid offset table-row ( 2 1 ) + 10 set-ushort 2 , offset table-row ( 4 0 ) set-ushort 0x10
267 valid offset table-row ( 2 1 ) + 10 set-ushort 2 , offset table-row ( 4 0 ) set-ushort 0x11
269 valid offset table-row ( 2 1 ) + 10 set-ushort 2 , offset table-row ( 4 0 ) set-ushort 0x16
270 #static + bad visibility
271 #LAMEIMPL MS doesn't verify visibility
272 invalid offset table-row ( 2 1 ) + 10 set-ushort 2 , offset table-row ( 4 0 ) set-ushort 0x12
273 invalid offset table-row ( 2 1 ) + 10 set-ushort 2 , offset table-row ( 4 0 ) set-ushort 0x13
274 invalid offset table-row ( 2 1 ) + 10 set-ushort 2 , offset table-row ( 4 0 ) set-ushort 0x14
275 invalid offset table-row ( 2 1 ) + 10 set-ushort 2 , offset table-row ( 4 0 ) set-ushort 0x15
277 #public and not static
278 invalid offset table-row ( 2 1 ) + 10 set-ushort 2 , offset table-row ( 4 0 ) set-ushort 0x06
280 #field is constant but has no row in the contant table
281 #LAMESPEC this check is missing from the spec
282 invalid offset table-row ( 4 0 ) or-ushort 0x50
284 #TODO enum and signature content
288 assembly assembly-with-methods.exe
291 #unused bits 4,5,6,8,9,10,11,15
292 #LAMEIMPL MS doesn't check invalid bits 6,8,9,10,11,13,14,15
293 invalid offset table-row ( 6 0 ) + 4 set-bit 6
294 invalid offset table-row ( 6 0 ) + 4 set-bit 8
295 invalid offset table-row ( 6 0 ) + 4 set-bit 9
296 invalid offset table-row ( 6 0 ) + 4 set-bit 10
297 invalid offset table-row ( 6 0 ) + 4 set-bit 11
298 invalid offset table-row ( 6 0 ) + 4 set-bit 13
299 invalid offset table-row ( 6 0 ) + 4 set-bit 14
300 invalid offset table-row ( 6 0 ) + 4 set-bit 15
305 #invalid .ctor with generic params and specialname (6)
306 #method 0 is a .ctor, method 1 is generic
307 invalid offset table-row ( 6 1 ) + 6 or-ushort 0x1800 , offset table-row ( 6 1 ) + 8 set-ushort read.ushort ( table-row ( 6 0 ) + 8 )
309 #visibility 0x7 is invalid (6)
310 invalid offset table-row ( 6 0 ) + 6 or-ushort 0x7
312 #Invalid combination of flags (7)
314 invalid offset table-row ( 6 2 ) + 6 set-ushort 0x0030
316 invalid offset table-row ( 6 2 ) + 6 set-ushort 0x0050
318 invalid offset table-row ( 6 2 ) + 6 set-ushort 0x0110
320 invalid offset table-row ( 6 2 ) + 6 set-ushort 0x0420
321 #abstract + pinvokeimpl
322 invalid offset table-row ( 6 2 ) + 6 set-ushort 0x2400
324 #LAMEIMPL MS doesn't care about this
325 #compilercontrolled | specialname
326 invalid offset table-row ( 6 2 ) + 6 set-ushort 0x0800
328 #LAMEIMPL MS doesn't care about this
329 #compilercontrolled | rtspecialname
330 invalid offset table-row ( 6 2 ) + 6 set-ushort 0x1800
332 #Abstract method must be virtual (8)
333 invalid offset table-row ( 6 2 ) + 6 set-ushort 0x0400
335 #A rtspecialnamemethod must be special name (9)
336 invalid offset table-row ( 6 2 ) + 6 set-ushort 0x1000
338 #XXX we don't care about CAS security (10, 11,12,13)
340 #name shall be non empty (14)
341 invalid offset table-row ( 6 2 ) + 8 set-ushort 0
342 invalid offset table-row ( 6 2 ) + 8 set-ushort 0x9999
344 #Interface cannot have .ctors (15)
345 #method 3 belongs to an inteface
346 invalid offset table-row ( 6 3 ) + 8 set-ushort read.ushort ( table-row ( 6 0 ) + 8 )
347 #Interfacre methods can't be static
348 invalid offset table-row ( 6 3 ) + 6 or-ushort 0x0010
350 #XXX we don't care about CLS names (17)
352 #signature shall be good (18)
353 invalid offset table-row ( 6 2 ) + 10 set-ushort 0x9999
355 #TODO type kind check for valuetypes (21)
356 #TODO implement duplicate detection (22)
358 #if (final,newslot or stric) then it must be virtual (24)
360 valid offset table-row ( 6 2 ) + 6 set-ushort 0x0060
361 invalid offset table-row ( 6 2 ) + 6 set-ushort 0x0020
364 valid offset table-row ( 6 2 ) + 6 set-ushort 0x0140
365 invalid offset table-row ( 6 2 ) + 6 set-ushort 0x0100
368 valid offset table-row ( 6 2 ) + 6 set-ushort 0x0240
369 invalid offset table-row ( 6 2 ) + 6 set-ushort 0x0200
371 #if pinvoke then it must not be virtual (25)
372 #this is a pretty stupid test as all pinvokes must be static, which disallows virtual
373 #method 5 is a pinvoke
374 invalid offset table-row ( 6 5 ) + 6 or-ushort 0x0040
376 #if !abstract then only one of: rva != 0, pinvoke or implruntime (26)
377 #pinvoke with rva != 0
378 invalid offset table-row ( 6 5 ) set-uint read.uint ( table-row ( 6 2 ) )
380 #pinvoke with runtime
381 #LAMEIMPL/SPEC either MS ignores it or the spec is ill defined
382 #invalid offset table-row ( 6 5 ) + 4 or-ushort 0x1000
384 #if compilercontroled (0x0) it must have an RVA or a pinvoke
385 #let's change method 3 which is part of an interface
386 invalid offset table-row ( 6 3 ) + 6 set-ushort 0x05c0
388 #TODO check signature (28,29,30,31,32,33)
390 #if RVA = 0 then one of (abstract, runtime, pinvoke) (34)
391 #let's test with an abstract class, method 6 is abstract and belongs to one.
392 invalid offset table-row ( 6 7 ) + 6 set-ushort 0x0006
394 valid offset table-row ( 6 7 ) + 6 set-ushort 0x01c6 , offset table-row ( 6 7 ) + 4 or-ushort 0x1000
396 #if rva != 0 then abstract == 0 and codetypemask must be (native,cil,runtime) and rva shall be valid (35)
397 #rva != 0 and abstract == 0
398 invalid offset table-row ( 6 2 ) + 6 or-ushort 0x0400
399 #rva != 0 and codetypemask == OPTIL
400 invalid offset table-row ( 6 2 ) + 4 set-ushort 0x0002
402 invalid offset table-row ( 6 2 ) set-uint 0x999999
404 #if pinvoke the rva == 0 and has a row in implmap (36)
405 #method 5 is a pinvoke
406 #pinvoke with rva !=0
407 invalid offset table-row ( 6 5 ) set-uint 0x20f8
408 #pinvoke without an implmap row
409 invalid offset table-row ( 0x1C 0 ) + 2 set-ushort 0xF
411 #if rtspecialname = 1 then name must be: .ctor and .cctor (37)
412 #is not .ctor or .cctor
413 invalid offset table-row ( 6 2 ) + 6 or-ushort 0x1800
415 #.ctor or .cctor without rtspecialname (38)
416 #method 9 is .ctor method 10 is .cctor
417 invalid offset table-row ( 6 9 ) + 6 set-ushort 0x0006
418 invalid offset table-row ( 6 10 ) + 6 set-ushort 0x0016
420 #TODO do all .ctor and .cctor valdiation (39, 40)
423 methoddef-table-global-methods {
424 assembly assembly-with-global-method.exe
426 #checks for methods owned by <module> (20)
429 valid offset table-row ( 6 0 ) + 6 set-ushort 0x0010
431 valid offset table-row ( 6 0 ) + 6 set-ushort 0x0011
432 #static + compiler controled
433 valid offset table-row ( 6 0 ) + 6 set-ushort 0x0016
436 invalid offset table-row ( 6 0 ) + 6 set-ushort 0x0006
438 #must not be abstract
439 invalid offset table-row ( 6 0 ) + 6 set-ushort 0x0416
442 invalid offset table-row ( 6 0 ) + 6 set-ushort 0x0056
444 #can only be compiler controled, public or private
445 #which leaves out: famandassem assem family famorassem
446 #LAMEIMPL MS doesn't care about those bits.
447 invalid offset table-row ( 6 0 ) + 6 set-ushort 0x0012
448 invalid offset table-row ( 6 0 ) + 6 set-ushort 0x0013
449 invalid offset table-row ( 6 0 ) + 6 set-ushort 0x0014
450 invalid offset table-row ( 6 0 ) + 6 set-ushort 0x0015
453 methoddef-table-params {
454 assembly assembly-with-methods.exe
456 #method 12,13,14 have 3 params and params: 2,5,8
457 #method 13 has 3 params and params: 5
458 invalid offset table-row ( 6 12 ) + 12 set-ushort 6
459 invalid offset table-row ( 6 13 ) + 12 set-ushort 99
464 assembly assembly-with-params.exe
466 #Flags should only have valid bits (3)
467 #bits not used: 2,3,5,6,7,8,910,11,14,15
468 invalid offset table-row ( 8 0 ) set-bit 2
469 invalid offset table-row ( 8 0 ) set-bit 3
470 invalid offset table-row ( 8 0 ) set-bit 5
471 invalid offset table-row ( 8 0 ) set-bit 6
472 invalid offset table-row ( 8 0 ) set-bit 7
473 invalid offset table-row ( 8 0 ) set-bit 8
474 invalid offset table-row ( 8 0 ) set-bit 9
475 invalid offset table-row ( 8 0 ) set-bit 10
476 invalid offset table-row ( 8 0 ) set-bit 11
477 invalid offset table-row ( 8 0 ) set-bit 14
478 invalid offset table-row ( 8 0 ) set-bit 15
480 #TODO verify if sequence is < number of params, requires to decode signature (4)
483 valid offset table-row ( 8 0 ) + 2 set-ushort 0
484 invalid offset table-row ( 8 0 ) + 2 set-ushort 2
485 invalid offset table-row ( 8 1 ) + 2 set-ushort 1
488 #if HasDefault = 1 then there must be a row in the constant table (6)
489 #param 2 doesn't have a default
490 invalid offset table-row ( 8 2 ) or-ushort 0x1000
492 #if HasDefault = 0 then there must be no row in the constant table (7)
493 #param 0 have a default
494 invalid offset table-row ( 8 0 ) set-ushort 0x000
496 #if FieldMarshal = 1 the there must be a row in the FieldMarshal table
497 invalid offset table-row ( 8 1 ) set-ushort 0x2000
499 invalid offset table-row ( 8 1 ) + 4 set-ushort 0x99999
501 valid offset table-row ( 8 1 ) + 4 set-ushort 0
504 interfaceimpl-table {
505 assembly assembly-with-complex-type.exe
507 #class cannot be null (2)
508 #LAMEIMPL MS allows a null class
509 valid offset table-row ( 9 0 ) set-ushort 0
511 #class must be a valid row (3.a)
512 invalid offset table-row ( 9 0 ) set-ushort 0x9999
514 #interface must be a valid token (3.b)
516 invalid offset table-row ( 9 0 ) + 2 set-ushort 0
517 #invalid table bit 0x3
518 invalid offset table-row ( 9 0 ) + 2 set-ushort 0x7
519 #invalid token typedef
520 invalid offset table-row ( 9 0 ) + 2 set-ushort 0x8800
521 #invalid token typeref
522 invalid offset table-row ( 9 0 ) + 2 set-ushort 0x8801
523 #invalid token typespec
524 invalid offset table-row ( 9 0 ) + 2 set-ushort 0x8802
526 #TODO verify if the target is an interface (3.c)
531 assembly assembly-with-complex-type.exe
533 #class must be a valid token (1 2)
535 invalid offset table-row ( 10 0 ) set-ushort 0
537 invalid offset table-row ( 10 0 ) set-ushort 0x0015
538 invalid offset table-row ( 10 0 ) set-ushort 0x0016
539 invalid offset table-row ( 10 0 ) set-ushort 0x0017
541 invalid offset table-row ( 10 0 ) set-ushort 0x1000
542 invalid offset table-row ( 10 0 ) set-ushort 0x1001
543 invalid offset table-row ( 10 0 ) set-ushort 0x1002
544 invalid offset table-row ( 10 0 ) set-ushort 0x1003
545 invalid offset table-row ( 10 0 ) set-ushort 0x1004
547 #name must be valid and non-empty (3)
548 invalid offset table-row ( 10 0 ) + 2 set-ushort 0x0000
549 invalid offset table-row ( 10 0 ) + 2 set-ushort 0x9900
551 #signature must be valid (5)
552 invalid offset table-row ( 10 0 ) + 4 set-ushort 0x9900
555 #TODO validate the signature (5)
557 #LAMESPEC CompilerControled visibility (9,10) is nice but no impl care about
559 #LAMESPEC what does (11) mean?
563 assembly assembly-with-constants.exe
565 #type must be one of (bool, char, i1, u1, i2, u2, i4, u4, i8, u8, r4, r8, string or class
566 #class must have value zero (1)
567 #this means (type >= 0x02 && type <= 0x0e) or (type == 0x12 && value == 0)
569 invalid offset table-row ( 0xB 0 ) set-byte 0x00
570 invalid offset table-row ( 0xB 0 ) set-byte 0x01
571 invalid offset table-row ( 0xB 0 ) set-byte 0x01
572 invalid offset table-row ( 0xB 0 ) set-byte 0x0F
573 invalid offset table-row ( 0xB 0 ) set-byte 0x10
574 invalid offset table-row ( 0xB 0 ) set-byte 0x11
575 invalid offset table-row ( 0xB 0 ) set-byte 0x13
576 invalid offset table-row ( 0xB 0 ) set-byte 0x20
578 #type == class && value != 0
579 invalid offset table-row ( 0xB 2 ) set-byte 0x12 , offset table-row ( 0xB 2 ) + 4 set-ushort 0x0001
581 #parent is a valid row in the field, property or param table (3)
582 #Test for a property with a valid default value
583 #First remove default from param 'a' (param table idx 0)
584 #Then set the has default flag in the property table
585 #Finally, make the first constant point from the part to the property (const 1, prop 0, token 0x6)
586 valid offset table-row ( 0x8 0 ) set-ushort 0 , offset table-row ( 0x17 0 ) or-ushort 0x1000 , offset table-row ( 0xB 1 ) + 2 set-ushort 0x6
589 invalid offset table-row ( 0xB 0 ) + 2 set-ushort 0x0013 , offset table-row ( 0x04 0 ) set-ushort 0x16
591 invalid offset table-row ( 0xB 0 ) + 2 set-ushort 0x0000 , offset table-row ( 0x04 0 ) set-ushort 0x16
593 invalid offset table-row ( 0xB 0 ) + 2 set-ushort 0x00F0 , offset table-row ( 0x04 0 ) set-ushort 0x16
595 invalid offset table-row ( 0xB 0 ) + 2 set-ushort 0x00F1 , offset table-row ( 0x04 0 ) set-ushort 0x16
597 invalid offset table-row ( 0xB 0 ) + 2 set-ushort 0x00F2 , offset table-row ( 0x04 0 ) set-ushort 0x16
601 #TODO check value range
602 #we set it to 1 less the end of the blob heap
603 invalid offset table-row ( 0xB 0 ) + 4 set-ushort read.uint ( stream-header ( 3 ) + 4 )
605 #LAMEIMPL, MS doesn't bound check the constant size. Lame of them.
606 invalid offset table-row ( 0xB 0 ) + 4 set-ushort read.uint ( stream-header ( 3 ) + 4 ) - 1
610 assembly assembly-with-cattr.exe
612 #parent is a valid coded index (2)
613 #The spec say any table can be used, but only 19 tables are allowed on the coded token
615 invalid offset table-row ( 0xC 0 ) set-ushort 0x33
616 invalid offset table-row ( 0xC 0 ) set-ushort 0x34
617 invalid offset table-row ( 0xC 0 ) set-ushort 0x35
618 invalid offset table-row ( 0xC 0 ) set-ushort 0x36
620 #LAMEIMPL MS doesn't test this error
621 invalid offset table-row ( 0xC 0 ) set-ushort 0x37
622 #LAMEIMPL MS doesn't test this error
623 invalid offset table-row ( 0xC 0 ) set-ushort 0x38
625 invalid offset table-row ( 0xC 0 ) set-ushort 0x39
626 invalid offset table-row ( 0xC 0 ) set-ushort 0x3A
627 invalid offset table-row ( 0xC 0 ) set-ushort 0x3B
628 invalid offset table-row ( 0xC 0 ) set-ushort 0x3C
629 invalid offset table-row ( 0xC 0 ) set-ushort 0x3D
630 invalid offset table-row ( 0xC 0 ) set-ushort 0x3E
631 invalid offset table-row ( 0xC 0 ) set-ushort 0x3F
634 invalid offset table-row ( 0xC 0 ) set-ushort 0x8801
635 invalid offset table-row ( 0xC 0 ) set-ushort 0x8832
637 #type is a valid token (3)
638 #this uses 3 bits and only 0x2/0x3 are valid
639 invalid offset table-row ( 0xC 0 ) + 2 set-ushort 0x0008
640 invalid offset table-row ( 0xC 0 ) + 2 set-ushort 0x0009
641 valid offset table-row ( 0xC 0 ) + 2 set-ushort 0x000A
642 valid offset table-row ( 0xC 0 ) + 2 set-ushort 0x000B
643 invalid offset table-row ( 0xC 0 ) + 2 set-ushort 0x000C
644 invalid offset table-row ( 0xC 0 ) + 2 set-ushort 0x000D
645 invalid offset table-row ( 0xC 0 ) + 2 set-ushort 0x000E
646 invalid offset table-row ( 0xC 0 ) + 2 set-ushort 0x000F
648 #value is optional (4)
649 valid offset table-row ( 0xC 0 ) + 4 set-ushort 0
651 #Valid is a valid blob index (5)
652 invalid offset table-row ( 0xC 0 ) + 4 set-ushort 0x8888
654 #TODO validate the cattr blob (6,7,8,9)
655 #TODO verify is Type is a .ctor.
658 field-marshal-table {
659 assembly assembly-with-complex-type.exe
661 #part must be valid (2)
662 #LAMEIMPL MS doesn't verify for null
663 invalid offset table-row ( 0xd 0 ) set-ushort 0x0000 , offset table-row ( 0x4 5 ) set-ushort 0x0001
664 invalid offset table-row ( 0xd 0 ) set-ushort 0x8800 , offset table-row ( 0x4 5 ) set-ushort 0x0001
665 invalid offset table-row ( 0xd 0 ) set-ushort 0x8801 , offset table-row ( 0x4 5 ) set-ushort 0x0001
667 #native type must index non null valid blob index (3)
668 #LAMEIMPL MS doesn't verify for null
669 invalid offset table-row ( 0xd 0 ) + 2 set-ushort 0
670 invalid offset table-row ( 0xd 0 ) + 2 set-ushort 0x9900
672 #TODO check for dups (4)
674 #TODO check the marshalspec blob (5)
677 decl-security-table {
678 assembly assembly-with-cas.exe
681 invalid offset table-row ( 0xe 0 ) + 2 set-ushort 0x0000
682 invalid offset table-row ( 0xe 0 ) + 2 set-ushort 0x0007
683 invalid offset table-row ( 0xe 0 ) + 2 set-ushort 0x1000
684 invalid offset table-row ( 0xe 0 ) + 2 set-ushort 0x1001
685 invalid offset table-row ( 0xe 0 ) + 2 set-ushort 0x1002
687 #bad permission set (6)
688 invalid offset table-row ( 0xe 0 ) + 4 set-ushort 0x8800
692 assembly assembly-with-complex-type.exe
694 #valid parent row (2)
695 invalid offset table-row ( 0xF 0 ) + 6 set-ushort 0x0000
696 invalid offset table-row ( 0xF 0 ) + 6 set-ushort 0x0880
698 #TODO check that the type is not an interface (2)
699 #TODO parent must not have auto layout (3)
701 #packing must be (0,1,2,4,8,16,32,64,128) (4)
702 invalid offset table-row ( 0xF 0 ) set-ushort 0x0003
704 #TODO do checks depending on the kind of parent (4)
706 #Check layout along the inheritance chain. (7)
710 assembly assembly-with-complex-type.exe
712 #TODO check properties of the field (2, 5, 7, 8, 9)
714 #Field must be valid (4)
715 invalid offset table-row ( 0x10 0 ) + 4 set-ushort 0x0000
716 invalid offset table-row ( 0x10 0 ) + 4 set-ushort 0x8800
720 stand-alone-sig-table {
721 assembly assembly-with-complex-type.exe
723 #signature has a valid blob index (2)
725 #TODO validate the blob content. (3)
726 invalid offset table-row ( 0x11 0 ) set-ushort 0x8800
731 assembly assembly-with-events.exe
733 #parent must be a valid typedef token
734 invalid offset table-row ( 0x12 0 ) set-ushort 0x8800
737 invalid offset table-row ( 0x12 0 ) + 2 set-ushort 0x0000
738 invalid offset table-row ( 0x12 0 ) + 2 set-ushort 0x8800
740 #eventlist must not be duplicated and increase monotonically
741 #evt list is 1,3,7 we change the first to 4
742 invalid offset table-row ( 0x12 0 ) + 2 set-ushort 4
746 assembly assembly-with-events.exe
748 #event flags have valid bits (3)
749 #only bits 9 and 10 are used
751 invalid offset table-row ( 0x14 0 ) set-bit 0
752 invalid offset table-row ( 0x14 0 ) set-bit 1
753 invalid offset table-row ( 0x14 0 ) set-bit 2
754 invalid offset table-row ( 0x14 0 ) set-bit 3
755 invalid offset table-row ( 0x14 0 ) set-bit 4
756 invalid offset table-row ( 0x14 0 ) set-bit 5
757 invalid offset table-row ( 0x14 0 ) set-bit 6
758 invalid offset table-row ( 0x14 0 ) set-bit 7
759 invalid offset table-row ( 0x14 0 ) set-bit 8
760 invalid offset table-row ( 0x14 0 ) set-bit 11
761 invalid offset table-row ( 0x14 0 ) set-bit 12
762 invalid offset table-row ( 0x14 0 ) set-bit 13
763 invalid offset table-row ( 0x14 0 ) set-bit 14
764 invalid offset table-row ( 0x14 0 ) set-bit 15
766 #name is a valid non empty string (4)
767 invalid offset table-row ( 0x14 0 ) + 2 set-ushort 0
768 invalid offset table-row ( 0x14 0 ) + 2 set-ushort 0x8880
770 #event type can be null (6)
771 valid offset table-row ( 0x14 0 ) + 4 set-ushort 0
773 #event type is valid (7)
774 #coded table 0x3 is invalid
775 invalid offset table-row ( 0x14 0 ) + 4 set-ushort 0x7
776 invalid offset table-row ( 0x14 0 ) + 4 set-ushort 0x8880
777 invalid offset table-row ( 0x14 0 ) + 4 set-ushort 0x8881
778 invalid offset table-row ( 0x14 0 ) + 4 set-ushort 0x8882
780 #TODO eventtype must be a class (8)
782 #TODO for each row, there shall be one add_ and one remove_ row in methodsemantics (9)
783 #change AddOn to Other
784 invalid offset table-row ( 0x18 0 ) set-ushort 0x0004
785 #change RemoveOn to Other
786 invalid offset table-row ( 0x18 1 ) set-ushort 0x0004
788 #TODO for each row, there can be zero or one raise_ rows (10)
794 assembly assembly-with-properties.exe
796 #parent must be a valid typedef token
797 invalid offset table-row ( 0x15 0 ) set-ushort 0x8800
800 invalid offset table-row ( 0x15 0 ) + 2 set-ushort 0x0000
801 invalid offset table-row ( 0x15 0 ) + 2 set-ushort 0x8800
803 #propertylist must not be duplicated and increase monotonically
804 #property list is 1,3,7 we change the first to 4
805 invalid offset table-row ( 0x15 0 ) + 2 set-ushort 4
809 assembly assembly-with-properties.exe
812 #only bits 9, 10 and 12 are used
813 invalid offset table-row ( 0x17 0 ) set-bit 0
814 invalid offset table-row ( 0x17 0 ) set-bit 1
815 invalid offset table-row ( 0x17 0 ) set-bit 2
816 invalid offset table-row ( 0x17 0 ) set-bit 3
817 invalid offset table-row ( 0x17 0 ) set-bit 4
818 invalid offset table-row ( 0x17 0 ) set-bit 5
819 invalid offset table-row ( 0x17 0 ) set-bit 6
820 invalid offset table-row ( 0x17 0 ) set-bit 7
821 invalid offset table-row ( 0x17 0 ) set-bit 8
822 invalid offset table-row ( 0x17 0 ) set-bit 11
823 invalid offset table-row ( 0x17 0 ) set-bit 13
824 invalid offset table-row ( 0x17 0 ) set-bit 14
825 invalid offset table-row ( 0x17 0 ) set-bit 15
827 #valid non empty name (4)
828 invalid offset table-row ( 0x17 0 ) + 2 set-ushort 0
829 invalid offset table-row ( 0x17 0 ) + 2 set-ushort 0x8800
831 #type must be a non null type signature in the blob heap (6)
832 invalid offset table-row ( 0x17 0 ) + 4 set-ushort 0
833 invalid offset table-row ( 0x17 0 ) + 4 set-ushort 0x8800
835 #TODO signature must be of the right kind (7)
837 #if property has default, there must be a row in the defaults table
838 #we mark row zero as having default value
839 #field zero has default value
840 valid offset table-row (0x17 0) + 0 or-ushort 0x1000, #mark the property with hasdefault
841 offset table-row (0x04 0) + 0 set-ushort 0x0011, #clear literal and hasdefault from the field
842 offset table-row (0x0B 0) + 2 set-ushort 0x0006 #change the parent token to row 1 of the property table (0x2)
844 invalid offset table-row (0x17 0) + 0 or-ushort 0x1000
850 assembly assembly-with-complex-type.exe
852 #class shall be valid (2)
853 invalid offset table-row (0x19 0) set-ushort 0
854 invalid offset table-row (0x19 0) set-ushort 0x8800
856 #methodbody shall be valid (3)
858 invalid offset table-row (0x19 0) + 2 set-ushort 0x0000
859 invalid offset table-row (0x19 0) + 2 set-ushort 0x0001
861 invalid offset table-row (0x19 0) + 2 set-ushort 0x8800
862 invalid offset table-row (0x19 0) + 2 set-ushort 0x8801
864 #MethodDeclaration shall be valid
866 invalid offset table-row (0x19 0) + 4 set-ushort 0x0000
867 invalid offset table-row (0x19 0) + 4 set-ushort 0x0001
869 invalid offset table-row (0x19 0) + 4 set-ushort 0x8800
870 invalid offset table-row (0x19 0) + 4 set-ushort 0x8801
873 #TODO check MethodDeclaration method for virtual and owner type for !sealed (4,5)
874 #TODO check MethodBody for belonging to a super type of Class,been virtual and rva != 0 (6,7,8)
875 #TODO check MethodBody must belong to any ancestor or iface of Class (9)
876 #TODO check MethodDeclaration method shall not be final (10)
877 #TODO if MethodDeclaration is strict, it must be visible to Class (11)
878 #TODO the method signature of MethodBody must match of MethodDeclaration (12)
883 assembly assembly-with-module.exe
885 #string must be valid (2)
886 invalid offset table-row (0x1A 0) set-ushort 0
887 invalid offset table-row (0x1A 0) set-ushort 0x8801
889 #TODO there must be a row on the File table with the same name
893 assembly assembly-with-complex-type.exe
896 invalid offset table-row (0x1B 0) set-ushort 0
897 invalid offset table-row (0x1B 0) set-ushort 0x8800
901 assembly assembly-with-methods.exe
903 #flags has good values (2)
904 #used bits: 0,1,2,7,8,9,10
905 invalid offset table-row (0x1C 0) set-bit 3
906 invalid offset table-row (0x1C 0) set-bit 4
907 invalid offset table-row (0x1C 0) set-bit 5
908 invalid offset table-row (0x1C 0) set-bit 6
909 invalid offset table-row (0x1C 0) set-bit 11
910 invalid offset table-row (0x1C 0) set-bit 12
911 invalid offset table-row (0x1C 0) set-bit 13
912 invalid offset table-row (0x1C 0) set-bit 14
913 invalid offset table-row (0x1C 0) set-bit 15
915 #call conv 0 and 6 are invalid
916 invalid offset table-row (0x1C 0) set-ushort 0x0000
917 invalid offset table-row (0x1C 0) set-ushort 0x0600
918 invalid offset table-row (0x1C 0) set-ushort 0x0700
920 #memberforwarded token is valid and indexes a method (3)
922 invalid offset table-row (0x1C 0) + 2 set-ushort 0x0000, #null
923 offset table-row (0x06 5) + 6 set-ushort 0x0444 #set method to abstract instead of pinvoke
924 invalid offset table-row (0x1C 0) + 2 set-ushort 0x0002, #field
925 offset table-row (0x06 5) + 6 set-ushort 0x0444 #set method to abstract instead of pinvoke
926 invalid offset table-row (0x1C 0) + 2 set-ushort 0x8801, #bad method
927 offset table-row (0x06 5) + 6 set-ushort 0x0444 #set method to abstract instead of pinvoke
929 #charset rule is not required (4)
931 #import name must be valid (5)
932 invalid offset table-row (0x1C 0) + 4 set-ushort 0x0000 #null
933 invalid offset table-row (0x1C 0) + 4 set-ushort 0x8800 #invalid
935 #import scope must be valie (6)
936 invalid offset table-row (0x1C 0) + 6 set-ushort 0x0000 #null
937 invalid offset table-row (0x1C 0) + 6 set-ushort 0x8800 #invalid
939 #TODO check methoddef for pinvokeimpl and state (7)
943 assembly assembly-with-complex-type.exe
946 invalid offset table-row (0x1D 0) set-uint 0
948 invalid offset table-row (0x1D 0) set-uint 0x88880000
952 invalid offset table-row (0x1D 0) + 4 set-ushort 0,
953 offset table-row (0x04 17) set-ushort 0x0013 #remove fieldrva from target field
954 invalid offset table-row (0x1D 0) + 4 set-ushort 0x9901,
955 offset table-row (0x04 17) set-ushort 0x0013
958 #TODO verify if the field is a blitable valuetype
959 #TODO verify if the field.size + rva does boundcheck
963 assembly simple-assembly.exe
965 #The table can have zero or 1 row (1)
967 invalid offset tables-header + 40 set-uint 2,
968 offset stream-header (0) + 4 set-uint read.uint (stream-header (0) + 4) + 22 #increase the size of the #~ section
971 valid offset table-row (0x20 0) set-uint 0
972 valid offset table-row (0x20 0) set-uint 0x8003
973 valid offset table-row (0x20 0) set-uint 0x8004
974 invalid offset table-row (0x20 0) set-uint 0x8005
975 invalid offset table-row (0x20 0) set-uint 1
978 #only bits 0, 8, 14 and 15 are used
979 invalid offset table-row (0x20 0) + 12 set-bit 1
980 invalid offset table-row (0x20 0) + 12 set-bit 5
981 invalid offset table-row (0x20 0) + 12 set-bit 9
982 invalid offset table-row (0x20 0) + 12 set-bit 11
983 invalid offset table-row (0x20 0) + 12 set-bit 16
984 invalid offset table-row (0x20 0) + 12 set-bit 20
985 invalid offset table-row (0x20 0) + 12 set-bit 23
986 invalid offset table-row (0x20 0) + 12 set-bit 26
987 invalid offset table-row (0x20 0) + 12 set-bit 29
988 invalid offset table-row (0x20 0) + 12 set-bit 30
989 invalid offset table-row (0x20 0) + 12 set-bit 31
993 valid offset table-row (0x20 0) + 16 set-ushort 0
994 invalid offset table-row (0x20 0) + 16 set-ushort 0x9990
996 #name is a valid non-empty string (5)
997 invalid offset table-row (0x20 0) + 18 set-ushort 0
998 invalid offset table-row (0x20 0) + 18 set-ushort 0x9990
1000 #culture is an optional valid non-empty string (8)
1001 valid offset table-row (0x20 0) + 20 set-ushort 0
1002 invalid offset table-row (0x20 0) + 20 set-ushort 0x9990
1004 #TODO check if culture is one of the listed cultures (9) (23.1.3)
1007 assembly-ref-table {
1008 assembly simple-assembly.exe
1010 #flags can only have publickey set (2)
1011 valid offset table-row (0x23 0) + 8 set-uint 0
1012 valid offset table-row (0x23 0) + 8 set-uint 1
1013 invalid offset table-row (0x23 0) + 8 set-uint 0x0100
1014 invalid offset table-row (0x23 0) + 8 set-uint 0x4000
1015 invalid offset table-row (0x23 0) + 8 set-uint 0x8000
1016 invalid offset table-row (0x23 0) + 8 set-bit 2
1017 invalid offset table-row (0x23 0) + 8 set-bit 5
1018 invalid offset table-row (0x23 0) + 8 set-bit 9
1019 invalid offset table-row (0x23 0) + 8 set-bit 20
1020 invalid offset table-row (0x23 0) + 8 set-bit 22
1021 invalid offset table-row (0x23 0) + 8 set-bit 30
1023 #PublicKeyToken is valid (3)
1024 valid offset table-row (0x23 0) + 12 set-ushort 0
1025 invalid offset table-row (0x23 0) + 12 set-ushort 0x9700
1027 #name is a valid non-empty string (5)
1028 invalid offset table-row (0x23 0) + 14 set-ushort 0x9700
1029 invalid offset table-row (0x23 0) + 14 set-ushort 0
1031 #culture is an optional valid non-empty string (6)
1032 valid offset table-row (0x23 0) + 16 set-ushort 0
1033 invalid offset table-row (0x23 0) + 16 set-ushort 0x9990
1035 #TODO check if culture is one of the listed cultures (7) (23.1.3)
1037 #HashValue is an optinal valid blob item (9)
1038 valid offset table-row (0x23 0) + 18 set-ushort 0
1039 invalid offset table-row (0x23 0) + 18 set-ushort 0x9990
1041 #it's ok to have dups
1045 assembly assembly-with-resource.exe
1048 #only bit 0 is valid
1049 invalid offset table-row (0x26 0) set-bit 1
1050 invalid offset table-row (0x26 0) set-bit 4
1051 invalid offset table-row (0x26 0) set-bit 6
1052 invalid offset table-row (0x26 0) set-bit 8
1053 invalid offset table-row (0x26 0) set-bit 11
1054 invalid offset table-row (0x26 0) set-bit 17
1055 invalid offset table-row (0x26 0) set-bit 22
1056 invalid offset table-row (0x26 0) set-bit 27
1057 invalid offset table-row (0x26 0) set-bit 29
1058 invalid offset table-row (0x26 0) set-bit 31
1060 #name is a non empty string (2)
1061 invalid offset table-row (0x26 0) + 4 set-ushort 0
1062 invalid offset table-row (0x26 0) + 4 set-ushort 0x9999
1064 #hash is a valid blob item (3)
1065 invalid offset table-row (0x26 0) + 6 set-ushort 0
1066 invalid offset table-row (0x26 0) + 6 set-ushort 0x9999
1068 #TODO check name format (I belive only the lack of directory directives should be checked)
1069 #TODO check for dups based on name
1070 #TODO check for images with rows in file and assembly tables
1073 exported-type-table {
1074 assembly assembly-with-module.exe
1076 #flags is valid (it's a TypeAttribute flag set) (3)
1077 #Flags invalid bits: 6,9,14,15,19,21,24-31
1078 invalid offset table-row (0x27 0) set-bit 6 #this is a mysterious bit on MS
1079 invalid offset table-row (0x27 0) set-bit 9
1080 invalid offset table-row (0x27 0) set-bit 14
1081 invalid offset table-row (0x27 0) set-bit 15
1082 invalid offset table-row (0x27 0) set-bit 19
1083 valid offset table-row (0x27 0) set-bit 21 #this is the non specified FORWARDER bit
1084 invalid offset table-row (0x27 0) set-bit 24
1085 invalid offset table-row (0x27 0) set-bit 25
1086 invalid offset table-row (0x27 0) set-bit 26
1087 invalid offset table-row (0x27 0) set-bit 27
1088 invalid offset table-row (0x27 0) set-bit 28
1089 invalid offset table-row (0x27 0) set-bit 29
1090 invalid offset table-row (0x27 0) set-bit 30
1091 invalid offset table-row (0x27 0) set-bit 31
1095 #if Implementation points to file table visibility must be public (4)
1096 #invalid offset table-row (0x27 0) set-uint 0x100005 #LAMEIMPL/SPEC this check is not really relevant
1098 #if Implementation points to exported type table visibility must be nested public (5)
1099 #invalid offset table-row (0x27 1) set-uint 0x100005 #LAMEIMPL/SPEC this check is not really relevant
1101 #typename is a valid non-empty string (7)
1102 invalid offset table-row (0x27 0) + 8 set-ushort 0
1103 invalid offset table-row (0x27 0) + 8 set-ushort 0x9900
1105 #typenamedpace is a valid string (8,9)
1106 invalid offset table-row (0x27 0) + 10 set-ushort 0x9900
1108 #nested types must have an empty typenamespace (11)
1109 valid offset table-row (0x27 1) + 10 set-ushort 0
1110 invalid offset table-row (0x27 1) + 10 set-ushort 1 #LAMEIMPL ms doesn't check this.
1112 #12 implementation is a valid non empty token (12)
1113 invalid offset table-row (0x27 0) + 12 set-ushort 0
1114 invalid offset table-row (0x27 0) + 12 set-ushort 0x8880
1116 #TODO check if a type in the exported table is not defined in the current module (2)
1117 #TODO check if target type is valid and public (6)
1118 #TODO check for dups (14,15,16)
1121 manifest-resource-table {
1122 assembly assembly-with-resource.exe
1124 #flags must have a valid value (3)
1125 #only bits 0-2 are used
1126 invalid offset table-row (0x28 0) + 4 set-bit 3
1127 invalid offset table-row (0x28 0) + 4 set-bit 7
1128 invalid offset table-row (0x28 0) + 4 set-bit 16
1129 invalid offset table-row (0x28 0) + 4 set-bit 31
1131 #inly 0x1 and 0x2 are valid visibility values (4)
1132 invalid offset table-row (0x28 0) + 4 set-uint 0
1133 invalid offset table-row (0x28 0) + 4 set-uint 3
1134 invalid offset table-row (0x28 0) + 4 set-uint 4
1135 invalid offset table-row (0x28 0) + 4 set-uint 5
1136 invalid offset table-row (0x28 0) + 4 set-uint 6
1137 invalid offset table-row (0x28 0) + 4 set-uint 7
1139 #name shall index a valid non-empty (5)
1140 invalid offset table-row (0x28 0) + 8 set-ushort 0
1141 invalid offset table-row (0x28 0) + 8 set-ushort 0x9900
1143 #if implementation is null the offset is a valid offset based on cli resource entry (7)
1144 valid offset table-row (0x28 0) + 10 set-ushort 0,
1145 offset table-row (0x28 0) + 0 set-uint 1
1147 #LAMEIMPL it doesn't check the resource offset!
1148 invalid offset table-row (0x28 0) + 10 set-ushort 0,
1149 offset table-row (0x28 0) + 0 set-uint 0x990000
1152 #implementation is a valid token (8)
1153 #does it accept exported type?
1154 invalid offset table-row (0x28 0) + 10 set-ushort 0x0006
1156 #coded table 4 is invalid
1157 invalid offset table-row (0x28 0) + 10 set-ushort 0x0007
1159 invalid offset table-row (0x28 0) + 10 set-ushort 0x8800
1160 invalid offset table-row (0x28 0) + 10 set-ushort 0x8801
1162 #if implementation point to a file it's index must be zero (10)
1163 #row 0 is a file resource
1164 invalid offset table-row (0x28 0) set-uint 1
1166 #TODO check for dups (9)
1169 nested-class-table {
1170 assembly assembly-with-complex-type.exe
1172 #both nested and enclosing classes must index valid non-null rows in the typedef table (2,3)
1173 invalid offset table-row (0x29 0) set-ushort 0
1174 invalid offset table-row (0x29 0) set-ushort 0x9800
1176 invalid offset table-row (0x29 0) + 2 set-ushort 0
1177 invalid offset table-row (0x29 0) + 2 set-ushort 0x9800
1179 invalid offset table-row (0x29 0) + 2 set-ushort read.ushort (table-row (0x29 0))
1181 #TODO check for dups based on nestedclass (5)
1185 generic-param-table {
1186 assembly assembly-with-generics.exe
1190 invalid offset table-row (0x2A 0) + 2 set-bit 5
1191 invalid offset table-row (0x2A 0) + 2 set-bit 6
1192 invalid offset table-row (0x2A 0) + 2 set-bit 7
1193 invalid offset table-row (0x2A 0) + 2 set-bit 8
1194 invalid offset table-row (0x2A 0) + 2 set-bit 9
1195 invalid offset table-row (0x2A 0) + 2 set-bit 10
1196 invalid offset table-row (0x2A 0) + 2 set-bit 11
1197 invalid offset table-row (0x2A 0) + 2 set-bit 12
1198 invalid offset table-row (0x2A 0) + 2 set-bit 13
1199 invalid offset table-row (0x2A 0) + 2 set-bit 14
1200 invalid offset table-row (0x2A 0) + 2 set-bit 15
1202 #variance 0x3 is invalid
1203 invalid offset table-row (0x2A 0) + 2 set-ushort 0x3
1206 invalid offset table-row (0x2A 0) + 4 set-ushort 0
1207 invalid offset table-row (0x2A 0) + 4 set-ushort 0x8800
1208 invalid offset table-row (0x2A 0) + 4 set-ushort 0x8801
1211 invalid offset table-row (0x2A 0) + 6 set-ushort 0
1212 invalid offset table-row (0x2A 0) + 6 set-ushort 0x8800
1215 invalid offset table-row (0x2A 0) set-ushort 1,
1216 offset table-row (0x2A 1) set-ushort 0
1218 #not monotonically growing
1219 invalid offset table-row (0x2A 0) set-ushort 0,
1220 offset table-row (0x2A 1) set-ushort 0
1223 invalid offset table-row (0x2A 0) set-ushort 1,
1224 offset table-row (0x2A 1) set-ushort 2
1227 invalid offset table-row (0x2A 0) set-ushort 0,
1228 offset table-row (0x2A 1) set-ushort 2
1232 assembly assembly-with-generics.exe
1234 #method is a valid token
1235 invalid offset table-row (0x2B 0) set-ushort 0
1236 invalid offset table-row (0x2B 0) set-ushort 0x8800
1237 invalid offset table-row (0x2B 0) set-ushort 0x8801
1239 #instantiation is invalid
1241 invalid offset table-row (0x2B 0) + 2 set-ushort 0
1242 invalid offset table-row (0x2B 0) + 2 set-ushort 0xABCD
1244 #TODO check the content of the blob sig and validate against the token.
1247 generic-param-constraint-table {
1248 assembly assembly-with-generics.exe
1250 #owner is a valid rown in the gparam table
1251 invalid offset table-row (0x2C 0) set-ushort 0x0000
1252 invalid offset table-row (0x2C 0) set-ushort 0x2345
1254 #constaint is a valid token
1255 invalid offset table-row (0x2C 0) + 2 set-ushort 0x0000
1256 invalid offset table-row (0x2C 0) + 2 set-ushort 0x0007
1257 invalid offset table-row (0x2C 0) + 2 set-ushort 0x8800
1258 invalid offset table-row (0x2C 0) + 2 set-ushort 0x8801
1259 invalid offset table-row (0x2C 0) + 2 set-ushort 0x8802
1261 #TODO check for dups and sorting.