首页 > 其他分享 >ARM-8 代码还原动态调试之 pstree 多个条件跳转

ARM-8 代码还原动态调试之 pstree 多个条件跳转

时间:2024-09-13 16:52:20浏览次数:13  
标签:show pid walk current w1 跳转 x0 ARM pstree

  402600:	b9405360 	ldr	w0, [x27, #80]      // w0=show_parents, 调试确认为 show_parents
  402604:	f9400774 	ldr	x20, [x27, #8]      // x20=list
  402608:	7100001f 	cmp	w0, #0x0            // show_parents ?= 0
  40260c:	b9401fe0 	ldr	w0, [sp, #28]       // w0=pid_set
  402610:	1a9f07e2 	cset	w2, ne  // ne = any // w2=(show_parents ?= 0) ? 1:0
  402614:	0a000042 	and	w2, w2, w0          // show_parents & pid_set
  402618:	b40029d4 	cbz	x20, 402b50 <ferror@plt+0xc70>  // list = null
    // 此处if为多余代码
    if (list == NULL) {
        // cbn 402b50
    }

  40261c:	b9401be3 	ldr	w3, [sp, #24]       // w3=highlight
  402620:	aa1403e0 	mov	x0, x20             // x0=x20=walk=list
  402624:	14000003 	b	402630 <ferror@plt+0x750>
  402628:	f9406000 	ldr	x0, [x0, #192]      // x0=walk->next
  40262c:	b4000140 	cbz	x0, 402654 <ferror@plt+0x774>   // walk->next = null
  402630:	b9405401 	ldr	w1, [x0, #84]       // w1=walk->pid
  402634:	6b01007f 	cmp	w3, w1              // walk->pid ?= highlight
  402638:	54ffff81 	b.ne	402628 <ferror@plt+0x748>  // b.any
        for (walk = list; walk; walk = walk->next) {
            if (walk->pid != highlight) {
                // b.ne 402628               
                // 不相等就直到 walk->next 为空再跳到 402654 。
            }
            else (walk->pid != highlight) {
                // 相等就顺序执行 40263c ,
                break;
            }
        }

  40263c:	d503201f 	nop
  402640:	39428001 	ldrb	w1, [x0, #160]  // w1=walk->flags
  402644:	32000021 	orr	w1, w1, #0x1        // w1=walk->flags|0x1
  402648:	39028001 	strb	w1, [x0, #160]  // walk->flags=w1
         do {
            walk->flags |= 0x1;          

  40264c:	f9405c00 	ldr	x0, [x0, #184]      // x0=walk->parent
  402650:	b5ffff80 	cbnz	x0, 402640 <ferror@plt+0x760>   // walk->parent != null

            walk = walk->parent
         } while (walk != NULL);
      
      把以上代码可以写成:  
      for (current = find_proc(highlight); current; current = current->parent) {
            // cbnz 402640
            current->flags |= 0x1;
       }

  402654:	35002422 	cbnz	w2, 402ad8 <ferror@plt+0xbf8>   // w2 != 0
        if (show_parents & pid_set != 0) {
            // cbnz 402ad8
        }

  402658:	7100239f 	cmp	w28, #0x8       // w28=nsid
  40265c:	54000e40 	b.eq	402824 <ferror@plt+0x944>  // b.none
        if (nsid == 0x8) {
            // b.eq 402824
        }

    // 此处if为多余代码
    if (list == NULL) {
        // cbn 402b50
    }
    else {
        // cbz x0, 402654
        for (current = find_proc(highlight); current; current = current->parent) {
            // cbnz 402640
            current->flags |= PFLAG_HILIGHT;
        }
    }
    // order 402654
    
    // cbn 402b50   # 此处为多余代码
    #if 0
    if (show_parents & pid_set == 0) {
        // cbz 402658
    }
    #endif
    // 402654
    if (show_parents & pid_set != 0) {
        // cbnz 402ad8
        PROC *child_proc;
        if ( (child_proc = find_proc(pid)) == NULL) {
            // cbz 402b54
            fprintf(stderr, _("Process %d not found.\n"), pid);
            return 1;
        }

        // 402af4

    }
    // order 402658    

    // 402658
    if (nsid == 0x8) {
        // b.eq 402824
    }

标签:show,pid,walk,current,w1,跳转,x0,ARM,pstree
From: https://blog.csdn.net/xiaozhiwise/article/details/142214949

相关文章

  • HarmonyOS开发之Search组件
    在HarmonyOS应用开发中,Search组件提供了丰富的自定义选项,允许开发者根据应用的需求定制搜索栏的外观和行为。本文将通过几个具体的场景来介绍如何使用Search组件的不同属性来自定义搜索栏。场景一:自定义搜索图标为了使搜索栏更加符合应用的设计风格,可以通过searchIcon属性来自......
  • 第一章、HarmonyOS介绍简介
    1.前言欢迎来到鸿蒙应用开发系列教程的第一课,在本单元,你将学习HarmonyOS的基本概念,熟悉HarmonyOS核心技术理念、开发语言、UI框架开发和测试工具,了解应用的上架与分发能力。2.应用开发的机遇、挑战和趋势随着万物互联时代的开启,应用的设备底座将从几十亿手机扩展到数百亿的iot设......
  • 支付宝携手HarmonyOS SDK打造高效便捷的扫码支付体验
    背景在日常的购物转账、生活缴费等在线支付中,用户在正式拉起支付界面前,均需要至少经历一次"识别"+两次"寻找",即识别归属应用、寻找应用、寻找扫码入口,才能完成扫码、付款,每一步都带来不同程度的用户流失。如何将步骤繁琐的扫码支付做到最简化,是优化在线支付体验的关键。策略支付宝......
  • 消除干扰:如何在PyCharm中轻松设置Chrome无痕模式进行Web测试(WebStorm无痕模式打开HTML
    文章目录......
  • OpenHarmony 明星开发板和应用招募启动,等你来!
    为助力企业和开发者快速找到好用的开发板和应用,推动OpenHarmony生态发展,现启动 “OpenHarmony明星开发板和应用招募”评选活动!本次活动旨在为OpenHarmony生态树立优秀标杆,活动将围绕OpenHarmony的开发板和应用展开,历经报名、初选、复选、公示四个阶段,最终评选出的优秀开发板......
  • 【技术分享】Amazon EKS-不同的服务根据路径实现ALB的跳转
    Amazon Elastic Kubernetes Service以下简称-Amazon EKSAmazon EKS是一项托管 Kubernetes 服务,Amazon EKS 可自动管理负责安排容器、管理应用程序可用性、存储集群数据和其他关键任务的 Kubernetes 控制面板节点的可用性和可扩展性。通过 Amazon EKS,您可以利用亚马逊......
  • 2024最详细pycharm安装教程+最新pycharm专业版激活码
    一、Pycharm激活激活码(复制粘贴即可)KQ8KMJ77TY-eyJsaWNlbnNlSWQiOiJLUThLTUo3N1RZIiwibGljZW5zZWVOYW1lIjoiVW5pdmVyc2l0YXMgTmVnZXJpIE1hbGFuZyIsImxpY2Vuc2VlVHlwZSI6IkNMQVNTUk9PTSIsImFzc2lnbmVlTmFtZSI6IkpldOWFqOWutuahtiDorqTlh4blupflkI0iLCJhc3NpZ25lZUVtYWlsIjoibm......
  • Pycharm Flask 右键运行 运行参数与main中配置不同
    解决PycharmFlask(默认ip与端口不能改变与改变之后外网依旧不能访问ip的问题)_朋友charmflask改端口-CSDN博客想要和main中相同,可以在命令行执行pythonapp.py,或者按下面操作  设置完之后,记得点这里的运行,因为右键会变成xxx(1),暂时不知道右键这个咋改 ......
  • uniapp使用路由名称跳转
    由于web端和app公用一套菜单,而两个项目的路径是不同的,为解决这个问题,封装了一套使用路由名称作为跳转路由的方法1.在pages.json文件里pages对应的页面配置里添加routeName字段(自定义),我做的app里面的菜单是后台获取的,所以这里的value值对应的是后台返回的页面路由 2.开始封......
  • HarmonyOS开发之Swiper页面布局
    在HarmonyOSNEXT中使用Swiper组件进行页面布局时,为了提供更好的用户体验,我们可以实现一些自定义的动画效果以及自定义指示器。以下是两个具体的实现方案:场景一:Swiper页面支持自定义动画要实现Swiper页面支持自定义动画,我们需要设置Swiper组件的属性,并添加相应的事件处理程序来控制......