gpt4 book ai didi

android - 寄存器的类型为 Long(High Half)但预期为 Long(Low Half)

转载 作者:行者123 更新时间:2023-11-29 22:55:07 24 4
gpt4 key购买 nike

我正在尝试解决 Media Player seekTo() 方法的问题,该方法在前进/后退远程按钮按下事件时被调用,但出现此错误:
bug_report
使用以下经过编辑的 smali 尝试将 long 参数转换为 int:

.method private static synthetic a(JLandroid/media/MediaPlayer;)V
.locals 1

long-to-int v0, p1
.line 317
invoke-virtual {p2, v0}, Landroid/media/MediaPlayer;->seekTo(I)V

return-void
.end method

我该如何修复该错误或是否有任何其他方法可以使其正常工作?

这是原始代码(但当我按下 Forward 或 Rewind 时,它只是停止/暂停视频):

long-to-int p1, p0
.line 317
invoke-virtual {p2, p1}, Landroid/media/MediaPlayer;->seekTo(I)V

我的临时修复是这样的:

.method private static synthetic a(JLandroid/media/MediaPlayer;)V
.locals 3

#get current position
invoke-virtual {p2}, Landroid/media/MediaPlayer;->getCurrentPosition()I
move-result v0

#add some ms to current position register
const/16 v1, 0x6978
add-int v2,v0,v1
add-int v2,v2,v1
add-int v2,v2,v1
add-int v2,v2,v1
add-int v2,v2,v1

#seek to calculated position
.line 317
invoke-virtual {p2, v2}, Landroid/media/MediaPlayer;->seekTo(I)V
return-void
.end method

但即使我按下倒带它也只会寻找前进(因为我只将时间添加到当前位置)。
我无法为 Rewind 事件找到/创建自定义方法,源代码非常大且被混淆了。
跟踪错误链和方法调用链并没有把我带到任何地方。

最佳答案

因为这是一个静态方法,所以没有隐含的“this”参数,参数寄存器从 p0 开始。所以第一个长参数是p0,p1MediaPlayer参数是p2

对于 long-to-int 指令(以及大多数使用长值的指令),您可以通过传递宽寄存器对中的第一个寄存器来指定要处理的宽值。在这种情况下,即 p0,而不是 p1

错误是指您传递的是宽寄存器对的上半部分,而不是下半部分。

所以,long-to-int v0, p0 可能就是您想要的。

关于android - 寄存器的类型为 Long(High Half)但预期为 Long(Low Half),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57524117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com