[英]Doing an ASM call / ret in C
我尝试通过手动编写ret操作代码并调用ret地址来在汇编中进行简单的调用/ ret序列(从使用GCC编译的c代码):
void *addr;
addr = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0);
// Writing the ret op code
((char*)addr)[0] = 0xC3;
// Going to addr with the ret
asm volatile("call *%0" : : "r" (addr));
但是我遇到了细分错误。 任何人都知道为什么,以及如何纠正?
为了能够在存储页上执行指令,读取和写入特权是不够的;因此,必须执行以下操作: 它还需要标记为可执行( PROT_EXEC
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.