
Part (1): Line 1: foo:
Line 2: instr underscore 1 slash asterisk start of foo() asterisk slash
Line 3: instr underscore 2
Line 4: instr underscore 3
Line 5:.
Line 6: ret
Line 7:
Line 8:
Line 9:
Line 10:
Line 11: bar:
Line 12: instr underscore 1 slash asterisk start of bar() asterisk slash
Line 13: instr underscore 2
Line 14: instr underscore 3
Line 15:.
Line 16: ret
Line 17:
Line 18:
Line 19:
Line 20:
Line 21: main:
Line 22: instr 1
Line 23:.
Line 24: fptr 1 equals foo
Line 25: fptr 2 equals bar
Line 26:.
Line 27: fptr 1 (); indirect call to foo ()
Line 28: fptr 2 (); indirect call to bar ()
Line 29: instr underscore 21
Line 30: instr underscore 22
Line 31:.
Line 32:
Line 33:
Line 34:
Part 2: Line 1: L 1 slash asterisk label: legitimate indirect call target (8 B) asterisk slash
Line 2: foo:
Line 3: instr underscore 1 slash asterisk start of foo () asterisk slash
Line 4: instr underscore 2
Line 5: instr underscore 3
Line 6:.
Line 7: pop reg 0 slash asterisk store return addr in reg 0 asterisk slash
Line 8: if (asterisk reg 0 not equals L 3) raise underscore alarm () slash asterisk check label asterisk slash
Line 9: else jmp (reg 0 plus 8)
Line 10:
Line 11: L 1 slash asterisk label: legitimate indirect call target () asterisk slash
Line 12: bar:
Line 13: instr underscore 1 slash asterisk start of bar () asterisk slash
Line 14: instr underscore 2
Line 15: instr underscore 3
Line 16:.
Line 17: pop reg 0 slash asterisk store return addr in reg 0 asterisk slash
Line 18: if (asterisk reg 0 not equals L 3) raise underscore alarm () slash asterisk check label asterisk slash
Line 19: else jmp (reg 0 plus 8)
Line 20:
Line 21: main:
Line 22: instr 1
Line 23:.
Line 24: fptr 1 equals foo
Line 25: fptr 2 equals bar
Line 26:
Line 27: if (asterisk (fptr 1 minus 8) not equals L 1) raise underscore alarm ()
Line 28: else (fptr 1) ()
Line 29: L 3 slash asterisk label: legitimate target for return asterisk slash
Line 30: if (asterisk (fptr 2 minus 8) not equals L 1) raise underscore alarm ()
Line 31: else (fptr 1) ()
Line 31:.
Line 32: L 3 slash asterisk label: legitimate target for return asterisk slash
Line 33: instr underscore 21
Line 34: instr underscore 21.
Back