So rather than stepping through the operations one by one, my program converts the operations into native machine code and lets the hardware do the work directly
Modern operating systems have page-granularity protections for different parts of process memory: read, write, and execute.
In a running process, the pages holding program code and loaded libraries will have their write bit cleared and execute bit set. Most of the other pages will have their execute bit cleared and their write bit set. 读写部分的安全以及独立性
1 | struct asmbuf * |
在编译器级别来做
1 | switch (operator) { |