我想分配一个具有执行权限的内存.所以我使用mprotect来更改权限.为了获得页面对齐的内存,我使用了一个valloc函数.
void * temp = (void *) valloc(x);
Run Code Online (Sandbox Code Playgroud)
然后
if( mprotect(temp, BLOCK_SIZE, (PROT_READ | PROT_WRITE |PROT_EXEC))) {
exit(-1);
}
Run Code Online (Sandbox Code Playgroud)
现在我想为这个分配的块添加更多内存.因此我使用了一个realloc函数.
void * new_temp = (void *) realloc(temp, 1024);
Run Code Online (Sandbox Code Playgroud)
这个重新分配会自动将分配的内存的权限更改为我之前设置的内存吗?如果realloc将整个块移动到不同的位置,先前分配的内存的权限和新分配的内存是什么?
应该mprotect再次使用来获取执行权限内存.是否有realloc页面大小边界的API valloc.?
我正在编写一个自修改代码.
movq $TARGET_CIA, 0x550(%rax)
Run Code Online (Sandbox Code Playgroud)
此符号TARGET_CIA最初未定义,在运行时我尝试将64位立即值复制到此位置.但是在编译时,该指令将此未定义立即值的值取为32位,当我尝试复制64位时,我看到有符号扩展的32位.有没有办法让这个未定义的符号被视为64位值?