小编nco*_*ers的帖子

内存访问错误sys_rt_sigaction(信号处理程序)

在这篇连接Linux信号之后,我一直试图sys_rt_sigactionamd64中使用,但在发送信号时总是会出现内存访问错误.struct sigaction在使用C/C++函数时有效sigaction.

sys_rt_sigaction电话有什么问题?

带有ASM代码的C/C++:

#include<signal.h>
#include<stdio.h>
#include<time.h>

void handler(int){printf("handler\n");}
void restorer(){asm volatile("mov $15,%%rax\nsyscall":::"rax");}

struct sigaction act{handler};
timespec ts{10,0};

int main(){
 act.sa_flags=0x04000000;
 act.sa_restorer=&restorer;
 //*
 asm volatile("\
 mov $13,%%rax\n\
 mov %0,%%rdi\n\
 mov %1,%%rsi\n\
 mov %2,%%rdx\n\
 mov $8,%%r10\n\
 syscall\n\
 mov %%rax,%%rdi\n\
 mov $60,%%rax\n\
#syscall\n\
 "::"i"(7),"p"(&act),"p"(0):"rax","rdi","rsi","rdx","r10");
 /**/

 /*
 sigaction(7,&act,0);
 /**/

 nanosleep(&ts,0);
}
Run Code Online (Sandbox Code Playgroud)

g++ -o bin -std=c++11
g++ -o bin -std=c++11 -no-pie
Run Code Online (Sandbox Code Playgroud)

发送信号

kill -7 `pidof bin`
Run Code Online (Sandbox Code Playgroud)

linux assembly x86-64 system-calls

3
推荐指数
1
解决办法
717
查看次数

标签 统计

assembly ×1

linux ×1

system-calls ×1

x86-64 ×1