我正在使用 tesseract 项目将图像转换为字符串。但是,SIGSEGV 信号是从他的 JNI 发送的(随机?)。
我想在发送信号时重新启动我的应用程序,但我没有找到任何解决方案来使用 Java“捕获”信号。
有人有建议吗?
谢谢
我正在使用 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, "%s\n", error);
> exit(1);
> }
> printf ("%f\n", (*setDataSource)("/data/data/com.example.ap/files/cve_2015_2396.mp4"));
> dlclose(handle);
> return 0;