SLIDE 10 Pad Removal
55
cmp $0xffffffff,%edx 6 byte pad movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax cmp $0xffffffff,%edx movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax
Pad Removal
56
cmp $0xffffffff,%edx 6 byte pad movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax cmp $0xffffffff,%edx movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax cmp $0xffffffff,%edx movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax
Pad Removal
57
cmp $0xffffffff,%edx 6 byte pad movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax cmp $0xffffffff,%edx movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax cmp $0xffffffff,%edx movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax
Pad Removal
58
cmp $0xffffffff,%edx 6 byte pad movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax cmp $0xffffffff,%edx movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax cmp $0xffffffff,%edx movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax cmp $0xffffffff,%edx movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax
Pad Removal
59
cmp $0xffffffff,%edx 6 byte pad movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax cmp $0xffffffff,%edx movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax cmp $0xffffffff,%edx movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax cmp $0xffffffff,%edx movl $0x11030684,(%eax,%edi,1) ... ... lea -0x4(%edi),%eax
NaCl Validator
- One pass: from the start to the end of code
- Maintains two bitmaps: valid and target
- At each address checks the instruction
- If a valid instruction marks it in valid and advance by
instruction size
- If indirect branch checks masking instruction presence
- If direct branch, the destination is marked in target
- At the end target and valid are compared together
60