相关疑难解决方法(0)

如何强制将SIGILL发送到我的程序?

我试着用动态生成的代码做一些讨厌的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)

c linux macos signals

4
推荐指数
1
解决办法
1817
查看次数

标签 统计

c ×1

linux ×1

macos ×1

signals ×1