我试着用动态生成的代码做一些讨厌的hacky事情,我希望操作系统在遇到未知的操作码时发送给我一个SIGILL.这将让我添加一层关于我的程序的元信息等等.
但是,对于我的小测试程序,似乎操作系统不发送SIGILL,而是发送SIGBUS或SIGSEGV.我猜这意味着内存所在的页面上设置了NX位.
有关如何使内存可执行的任何提示?
供参考,这是我的测试程序:
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
void SIGILL_handler(int sig)
{
printf("Handling SIGILL\n");
}
typedef void(*FUNC)(void);
int main()
{
signal(SIGILL, SIGILL_handler);
int *bad = malloc(16);
memset(bad, 255, 16);
((FUNC)bad)();
printf("Returning like it's no big deal\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)