繁体   English   中英

在C中进行ASM呼叫/退出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM