-1

如何在 Linux中在汇编程序中返回信号?我想返回 SIGALRM(#14 信号)。

global _start

_start:
    mov    eax, 01h
    mov    ebx, 0xE
    int    80h

但:

Runtime error: time: 0 memory: 140 signal:-1

我知道我做错了,但我怎样才能返回任何 Linux 信号?

4

1 回答 1

1

我不确定您在“返回信号”下的意思是什么?在 Linux 中,信号是从一个进程发送到另一个进程的事件。

在 Linux 中,sys_kill 或 sys_tkill 用于向某个进程或线程发送信号。

论据是:

sys_kill = 37
eax = 37
ebx = process ID (<-1, -1 and 0 have special meaning)
ecx = signal to send in your case SIGALRM = 14


sys_tkill = 238
eax = 238
ebx = the PID of the thread
ecx = signal ID 

所以,如果你想向自己的进程发送信号,你必须先获取进程ID,然后再发送信号:

mov  eax, sys_getpid    ; sys_getpid = 20
int  80h
mov  ebx, eax   ; PID to ebx

mov  eax, sys_kill
mov  ecx, SIGALRM
int  80h

mov  eax, sys_exit   ; sys_exit = 1
xor  ebx, ebx
int  80h
于 2013-09-19T10:07:30.403 回答