Android:捕获SIGSEGV信号JNI

问题描述

| 我正在使用tesseract项目将图像转换为字符串。 但是,SIGSEGV信号是从JNI发送的(随机?)。 我想在信号发送后重新启动我的应用程序,但是我没有找到使用Java“捕获”信号的任何解决方案。 有人有建议吗? 谢谢     

解决方法

虽然您可以使用本机信号处理程序来捕获SIGSEGV,但是从处理程序内部进行android api交互方面,做任何有用的事情可能都不容易。 最好的办法可能是了解并解决问题。 就解决方法而言-这确实是一个非常次等的解决方案-大概可以在将来使用AlarmManager设置事件几秒钟,然后取消该事件/将其进一步推送(如果后来发现仍在运行) “风险”操作。或者您可以启动一项服务(不在同一进程中运行),如果服务连接丢失,该服务将重新启动您的应用程序。     ,由于没有人在帮助。我想指出一个事实,对目的或目标提出质疑是无礼的。我们想要的是事实,而不是观点或猜测。这似乎是一种习惯。就我而言,我想捕获SIGSERV,因为我想检测共享库中的漏洞。出于安全原因,如果没有受欢迎的误报,没有其他确定的方法可以检测到该漏洞。这是我几天前发现的东西:
> #include <stdio.h>
> #include <stdlib.h>
> #include <dlfcn.h>
> 
> 
> int main(int argc,char **argv) {
>     void *handle;
>     void* (*doSomething)(char);
>     char *error;
>     handle = dlopen (\"libexample.so\",RTLD_LAZY);
>     if (!handle) {
>         fprintf (stderr,\"%s\\n\",dlerror());
>         exit(1);
>     }
>     dlerror();    /* Clear any existing error */
>     foo = dlsym(handle,\"doSomething\");
>     if ((error = dlerror()) != NULL)  {
>         fprintf (stderr,error);
>         exit(1);
>     }
>     printf (\"%f\\n\",(*setDataSource)(\"/data/data/com.example.ap/files/cve_2015_2396.mp4\"));
>     dlclose(handle);
>     return 0;
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...