YJIT: Initialize code buffer with PUSH DS

PUSH DS triggers the #UD processor exception in 64-bit mode, which the
OS translates to a SIGILL. Unlike INT3, this triggers the usual crash
reporter, which makes failures easier to notice. When there is a
debugger attached, the PUSH DS pauses execution just like INT3.
This commit is contained in:
Alan Wu 2021-12-05 10:08:19 -05:00
Родитель bbfefd45c6
Коммит 26063d3954
1 изменённых файлов: 4 добавлений и 3 удалений

Просмотреть файл

@ -215,10 +215,11 @@ static uint8_t *alloc_exec_mem(uint32_t mem_size)
cb_init(cb, mem_block, mem_size);
// Fill the executable memory with INT3 (0xCC) so that
// executing uninitialized memory will fault
// Fill the executable memory with PUSH DS (0x1E) so that
// executing uninitialized memory will fault with #UD in
// 64-bit mode.
cb_mark_all_writeable(cb);
memset(mem_block, 0xCC, mem_size);
memset(mem_block, 0x1E, mem_size);
cb_mark_all_executable(cb);
return mem_block;