我尝试在汇编中执行一个简单的调用/ ret序列(从使用GCC编译的c代码),手动编写ret操作代码,并调用ret地址:
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));
但是我遇到了分段错误。任何人都知道为什么,以及如何纠正?