【问题标题】:Signal SIGSTOP received in the ARM Assembly in libc?在 libc 的 ARM 程序集中收到信号 SIGSTOP?
【发布时间】:2023-03-06 15:04:01
【问题描述】:

试图理解这个 ARM 程序集。为此,我收到了 SIGSTOP 信号。这里出了点问题。我会尝试但需要一些帮助

afd0c750:   push {r4, r7}        
afd0c754:   mov r7, #252    ; 0xfc  // what is this I think that its calling the SWI and it need the r7 to have this value.  
afd0c758:   svc 0x00000000
afd0c75c:   pop {r4, r7}
afd0c760:   movs r0, r0
afd0c764:   bxpl lr 
afd0c768:   b 0xafd3896c

【问题讨论】:

    标签: linux assembly arm


    【解决方案1】:

    SIGSTOP 被发送到进程以暂停它 - 以便稍后恢复 - 并且不是错误条件 - 或直接由错误条件生成。

    最可能的情况是您的进程在内核中执行线程时收到了SIGSTOP - 并且很可能在那里被阻塞。您的回溯将显示 SVC 指令作为用户堆栈上最后执行的指令,因为这是用户空间到内核的转换。

    从您的描述中不清楚SIGSTOP 是如何体现的。一个可能的候选人是gdb 是它的来源。

    完整的回溯在这里非常有用。

    【讨论】:

    • 是的,谢谢。你是对的,这是 gdb 调试。我正在为 c/c++ 代码进行 android-ndk gdb 调试。在某处,我的代码在 epoll_wait 处像这样停止,这是内核等待某个事件的一种方式。谢谢 Marko 和 Masta79
    • 补充一点,虽然我不知道为什么,但我正在调试的应用程序正在不间断地接收 SIGSTOP(hoho!)。要让应用程序继续运行,可以在 gdb 提示符处执行“处理 SIGSTOP nostop noprint”(noprint 很有用,因为否则 gdb 会停止应用程序以允许您一次读取一页)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多