189 8069 5689

ollvm编译器优化的bug-创新互联

近来用ollvm来编译一些代码,主要是需要对so进行一些混淆的操作,发现了一个bug,记录如下:

代码段1

创新互联建站于2013年开始,是专业互联网技术服务公司,拥有项目成都网站设计、成都做网站、外贸网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元平阴做网站,已为上家服务,为平阴各地企业和个人服务,联系电话:028-86922220
jint begin_antidebug()
{

    pthread_t antidebugtid;
    int ret = 0;
    ret = pthread_create(&antidebugtid, NULL, antidebug_listen_thread, NULL);
    if(ret!=0)
    {
        LOGANTI("Create pthread error!\n");
        exit (1);
    }

    return 0;
    
}

上面的代码段就是完成一个创建线程的逻辑,如果线程创建失败,直接退出应用,这段代码不管用
android ndk默认的编译器或者是ollvm编译器,运行结果都是按照代码逻辑的。

但是如果代码段2,如下

jint begin_antidebug()
{

    pthread_t antidebugtid;
    int ret = 0;
    ret = pthread_create(&antidebugtid, NULL, antidebug_listen_thread, NULL);
    if(ret!=0)
    {
        LOGANTI("Create pthread error!\n");
        exit (1);
    }

    
}

这段代码和上面的代码比较,少了一个 return 0;这条语句
这个时候,两种编译器对于编译的结果就有差异了

android ndk默认编译器 编译出来的代码依然能够按照代码逻辑运行。
而 ollvm编译器编译出来的代码,ret优化成0了,虽然线程创建成功了,但是进程也执行 exit(1);
退出了

防止这类bad code的方法,在Android.mk加入下面这行。

LOCAL_CFLAGS += -Werror

加强检查类型,出现warning和error同样处理

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页名称:ollvm编译器优化的bug-创新互联
文章地址:http://jkwzsj.com/article/cdsggd.html

其他资讯