android 支持 PTRACE_SINGLESTEP 吗?

2023-12-14

好的,这是一个简单的问题。当我使用 ptrace 系统调用时,android 支持 PTRACE_SINGLESTEP 吗?当我想ptrace一个android apk程序时,我发现我无法处理SINGLESTEP跟踪。但是当我使用PTRACE_SYSCALL时情况发生了变化,它可以完美工作。是android取消了这个功能还是arm缺乏硬件支持?任何帮助将不胜感激!谢谢。

这是我的核心程序:

    int main(int argc, char *argv[])
   {   
    if(argc != 2) {
    __android_log_print(ANDROID_LOG_DEBUG,TAG,"please input the pid!");
      return -1;
    }
    if(0 != ptrace(PTRACE_ATTACH, target_pid, NULL, NULL))
   {
    __android_log_print(ANDROID_LOG_DEBUG,TAG,"ptrace attach error");
    return -1;
   }
    __android_log_print(ANDROID_LOG_DEBUG,TAG,"start  monitor process     :%d",target_pid);
    while(1)
    {
    wait(&status);
    if(WIFEXITED(status))
    {
        break;
    }
if (ptrace(PTRACE_SINGLESTEP, target_pid, 0, 0) != 0)
__android_log_print(ANDROID_LOG_DEBUG,TAG,"PTRACE_SINGLESTEP attach error");
    }
ptrace(PTRACE_DETACH, target_pid, NULL, NULL);
__android_log_print(ANDROID_LOG_DEBUG,TAG,"monitor finished");   
return 0; 
    }

我在 shell 上运行这个程序。而且我可以获得root权限。 如果我将请求更改为 PTRACE_SYSCALL 程序将正常运行。 但如果请求是PTRACE_SINGLESTEP,程序就会报错!


自 2011 年以来,PTRACE_SINGLESTEP 已在 ARM Linux 上被删除这次提交.

硬件不支持单步执行;以前的内核支持涉及解码指令以找出下一个(分支)并暂时用调试中断软件断点替换它。

引用有关同一提交的邮件列表消息,描述旧情况:http://lists.infradead.org/pipermail/linux-arm-kernel/2011-February/041324.html

PTRACE_SINGLESTEP 是一个 ptrace 请求,旨在提供单步执行 当底层架构有硬件时支持用户空间 支持此操作。

在ARM上,我们设置arch_has_single_step()到 1 并尝试模仿 通过将当前指令反汇编为硬件单步执行 确定下一台电脑并在其上放置软件断点 地点。

不幸的是,这存在以下问题:

  1. 仅支持 ARMv7 指令的子集
  2. 不支持 Thumb-2
  3. 该代码不是 SMP 安全的

我们可以尝试修复此代码,但事实证明,由于 上述问题在实际中很少使用。例如,GDB 使用 PTRACE_POKETEXT 和 PTRACE_PEEKTEXT 用于管理断点本身 不需要任何内核帮助。

该补丁删除了 ptrace 含义中的单步模拟代码 PTRACE_SINGLESTEP 请求将在 ARM 上返回 -EIO。便携的 代码必须检查 ptrace 调用的返回值并处理 优雅地失败。

签署人:Will Deacon
---

我收到的有关 v1 的评论表明:

  • 如果需要模拟,可以从用户空间进行模拟
  • ltrace 使用 SINGLESTEP 调用(有条件地在编译时进行,因为其他架构(例如 mips)不支持此调用 request),但不检查 ptrace 的返回值。这是一个 ltrace 中的错误。
  • strace 不使用 SINGLESTEP
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android 支持 PTRACE_SINGLESTEP 吗? 的相关文章

  • v7 RecyclerView NullPointerException AccessibilityDelegateCompat.getBridge()

    运行我的 recyclerview 列表片段时出现此错误 java lang NullPointerException Attempt to invoke virtual method java lang Object android su
  • 强制用户在 Android 中的 EditText 中输入内容

    我的活动中有几个编辑文本 我希望我的用户在提交表单之前正确输入 我该怎么做 我还有旋转器和 RadioGroup 按钮 你可以加验证在提交按钮上单击 private boolean validateFields int yourDesire
  • ProGuard 无法与 Windows 中使用的 Joda Time 一起编译

    实际上 这是一个答案 而不是一个问题 我确实在 Windows 上花了很多时间 使用 JodaTime 并使用 ProGuard 将其包含在我的 Android 项目中 混淆器配置 libraryjars C Users Reto Docu
  • 毕加索动画加载图像

    我有以下代码在毕加索中加载图像 使用可绘制的占位符在图像下载时显示 不过 我想要的是一个动画旋转进度条样式的旋转器 它可以在图像加载时不断地旋转 就像我在大多数专业应用程序中看到的那样 毕加索似乎不支持这一点 只支持静态图像可绘制 有没有办
  • 在 Android 中长按时从操作模式中删除后退/主页按钮

    我已经在里面长按实现了上下文操作模式recycler view 为此我打电话给ActionModeCallback从创建动作模式开始 创建动作模式时 默认显示后退箭头 检查如下 单击后退箭头 操作模式将关闭 现在我想要hide or rem
  • FileNotFoundException:/存储/模拟/0/Android

    我尝试这个文件写入器 读取器代码段进行测试 File file new File Environment getExternalStorageDirectory LM lm lisdat 01 txt FileOutputStream ou
  • 如何从一个代码库创建多个 Android 应用

    我有一个 Android 代码库 它使用带有设置的 API 来获取多个应用程序的不同数据 所有应用程序都使用相同的代码库 但进行一两个设计调整 那么如何重用主代码库而不必每次都复制整个 Android 项目呢 iPhone 在同一个项目中使
  • 以编程方式更新 Android 中的联系人姓名和电话号码

    我创建一个应用程序来读取 更新 删除联系人详细信息 这是更新联系人姓名和电话号码的问题 有人可以帮助我吗 我该怎么做 我正在使用以下代码 但它不起作用 Override public View onCreateView LayoutInfl
  • 应用内结算错误

    我的 UNMANAGED 应用内购买无法正常工作 在它完美运行之前 我可以使用测试帐户成功购买 但它突然不起作用了 因为我记得我对商家帐户所做的只是添加更多 2 4 个测试帐户 添加后 我的应用内购买将不起作用 所以我更新了公钥并上传了一个
  • 尝试在模拟器上安装第二个 flutter 应用程序时出错

    我创建了一个简单的 flutter 应用程序并在 android 模拟器上运行它 效果还不错 现在我创建了另一个 当我尝试在模拟器上运行它时 我得到 Error ADB exited with exit code 1 adb failed
  • Firebase ANR - 甚至不使用 firebase

    随着 GMS 的最新更新 引入了新的 ANR 如果您退出应用程序 然后返回 则 ANR 就会初始化 线程跟踪似乎指向 Firebase 但我什至从未开始使用 Firebase 我猜它一定是新的 GMS 包的一部分 06 11 00 34 0
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • 如何在进入新活动之前终止线程和处理程序

    大家好 在我尝试清理处理程序时 这段代码可能有点混乱 因为我一直在尝试追踪崩溃发生的位置 我有一个对话框活动 显示密码输入 进度条由线程和处理程序动画显示 似乎当我试图查看进度条是否完成并尝试终止线程时 当我尝试进入新活动时 我这样做的方式
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • 如何以编程方式启动 ssh 服务器 android,以及如何获取连接到设备的用户名和密码

    我正在开发像这样的应用程序sshdroid 我想在 Android 操作系统上打开 ssh 连接 并且我想从电脑连接应用程序 我使用了 JSCH lib 但是这个lib用于将android连接到pc 我的要求是pc到android 任何人都
  • Android Studio - 值必须 ≥ 0

    我在 Android Studio 中收到与光标有关的错误 我的代码中有以下行 String data cursor getString cursor getColumnIndex columnIndex columnIndex 被传递到该
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文

随机推荐

  • 将值从一个字段拆分为两个字段

    我有一个表字段membername其中包含用户的姓氏和名字 是否可以将它们分成 2 个字段memberfirst memberlast 所有记录均采用 名字姓氏 格式 不带引号且中间有空格 不幸的是 MySQL 没有分割字符串的功能 但是您
  • 如何重建bluez

    我怎样才能重建bluez 是否可以 例如 我想更改 avctp c 中的某些内容 我从他们的网站下载了最新的 bluez 版本并进行了我需要进行的更改 现在 我如何才能使更改生效 即我需要做什么来重建蓝牙 注意 我使用的是Ubuntu 12
  • Pandas unstack问题:ValueError:索引包含重复条目,无法重塑

    我正在尝试用 pandas 解开多索引 并且不断收到 ValueError Index contains duplicate entries cannot reshape 给定一个包含四列的数据集 id 字符串 日期 字符串 位置 字符串
  • 根据窗口大小调整表单的标签和字体大小

    我正在寻求根据窗口大小调整标签大小及其字体大小的帮助 也就是说 当窗口调整大小时 标签本身会调整其字体和背景框以执行相同的操作 我知道我正在表单的 调整大小 事件上触发某些内容 但我不知道是什么 有人可以帮忙吗 这是 C 语言 但它可能对你
  • 使用soap 1.2的WCF生成带有soap 1.1参考的wsdl

    我正在创建一个 WCF 服务 它必须有一个 SOAP 1 2 端点 该服务使用以下自定义绑定
  • 超级账本中的第一个网络

    我正在尝试在 Hyperledger Fabric 中开发我的第一个网络 使用以下文档http hyperledger fabric readthedocs io en latest build network html 我已经完成设置直到
  • 如何查找并突出显示 ActiveSheet 中所有出现的多个字符串?

    我已经找到了解决方案 但代码太长了 然后我决定搜索一种将我想要查找和突出显示的所有单词插入到单个查找方法中的方法 我遇到了一些使用数组来执行此操作的想法 并使用这 3 个代码来编写我的代码 this this and this 但我是 VB
  • Ansible 动态选择主机组

    我的库存文件如下所示 host group 1 x x x 1 x x x 2 host group 2 x x x 3 x x x 4 现在我想根据脚本返回的参数在这些组上选择并执行任务 该剧本如下所示 host 127 0 0 1 ta
  • Composer 不会在私有存储库中加载私有存储库?

    因此 我尝试利用 Composer 包的强大功能来使我的应用程序更加模块化 所以我的主要应用程序现在依赖于一个私有存储库 我像这样拉入 repositories type vcs url tenant package git require
  • Powershell创建数组的数组

    我正在尝试使用 powershell 将数据推送到 REST api http influxdb com docs v0 8 api reading and writing data html 服务器期望的数据如下 name hd used
  • 找不到与绑定 NetTcpBinding 的端点的方案 net.tcp 相匹配的基地址。基地址方案是[http]

    我的 WCF 服务有这样的配置 该服务在 IIS Express 端口号 50187 上运行 该服务托管在 Visual Studio 2017 的 IIS Express 上
  • C# 数组逐元素差异的方法(导数近似)? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我通常使用 python 但正在学习 C C 中是否有一个预先存在的类 用于获取数组的逐元素差异 以基本上获得导数 例如 python 中的 numpy diff 根据这一页 n
  • 如何在本地运行 travis-ci

    我宁愿不必推动每一个微小的改变 travis yml以及我为了运行构建而对源代码所做的每一个小更改 使用jenkins 您可以下载jenkins并在本地运行 特拉维斯提供这样的东西吗 注意 我看过 travis ci cli 并下载了它 但
  • 如何将字符串转换为ArrayList?

    在我的字符串中 我可以有任意数量的以逗号分隔的单词 我希望将每个单词添加到 ArrayList 中 例如 String s a b c d e 尝试类似的东西 List
  • 在 LINQ 查询中使用内置 sql 函数?

    是否可以在 LINQ 查询中使用内置 sql 函数 例如 user name 如果没有 我可以使用其他东西吗 这取决于提供商 例如 在针对 SQL Server 的 LINQ to Entities 中 您可以使用SqlFunctions
  • 单击鼠标即可获取 MS 图表中的标记位置

    我正在使用 MS Charts 制作图表 现在图表有我想要获取坐标的标记点 如果用户单击标记点 我希望图表中具有交互性 以便单击标记点时我可以检索标记点的坐标 x 轴和 y 轴 例如对于图表 单击橙色点或蓝色点时 我想获取该点的坐标 例如第
  • 空手道针对SocketTimeoutException的重试机制

    我们有一个系统 用于在测试期间发出一些 PUT 请求 问题是 目前该系统的资源存在一些问题 有时无法及时响应 我们无法将读取超时值增加到大于 60 秒的值 原因有两个 如果系统响应速度不快 则很可能根本不会响应 其次 我们使用的代理在 60
  • Django:在中间件中用 request.urlconf 覆盖 ROOT_URLCONF

    当请求包含 api 子域时 我试图用另一个 url 覆盖 ROOT URLCONF 这就是我到目前为止所拥有的 from django utils cache import patch vary headers class Subdomai
  • 在 Excel 中显示一段时间的弹出窗口

    我正在尝试生成一个在给定时间后关闭的弹出窗口WaitTime很快 我咨询过this链接和this link 我尝试应用 VBA Excel宏消息框自动关闭 我的代码如下 Sub TestSubroutine Dim TemporalBox
  • android 支持 PTRACE_SINGLESTEP 吗?

    好的 这是一个简单的问题 当我使用 ptrace 系统调用时 android 支持 PTRACE SINGLESTEP 吗 当我想ptrace一个android apk程序时 我发现我无法处理SINGLESTEP跟踪 但是当我使用PTRAC