![]() |
1
2
“jiter”在堆或堆栈中分配空间,并将汇编代码插入其中。不,自我修改代码是完美的。virtualProtect(Windows)和mmap(Unix)可以将页面映射为可执行文件。默认情况下,通用操作系统会将可执行页面标记为读/执行但不写,您仍然可以在运行时更改此标记。 如果没有办法修改代码,就没有办法加载一个dll,除非它被加载到一个固定的虚拟地址,并共享到每个进程的地址空间中;然后您将得到地址空间hell而不是dll hell。 我猜你听说过nx位或dep等,它们只是保护你不执行不可执行的代码,这有助于防止堆栈溢出等。 |
![]() |
2
0
JIT代码不能取代优化的机器代码;它取代了加载的Java字节码。我不知道这是如何在OpenJDK中实现的,但通常,JVM加载字节代码并将其保持在某种内部结构中,通常是在具有用于执行代码的虚拟函数或虚拟函数的类中。当编译时,内部结构的指针被指向具有相同接口的类的指针替换,其中底层表示是本机代码而不是Java字节代码,并且实现虚拟方法,使得它们调用本机代码而不是解释字节代码。代码没有修改,只是指向不同的地方。 |
![]() |
M Rajoy · DOS中断10与AX 700 6 月前 |
![]() |
Imyaf · 在什么条件下,在组装时对“if”和“if-else”进行比较? 10 月前 |
|
Anonymous · 程序计数器的下一个指令是什么? 10 月前 |
![]() |
Daniel Langr · GCC不为类外默认复制构造函数生成机器代码 11 月前 |
![]() |
EE18 · C中字节序与尺寸组装转换的关系 11 月前 |