你好,我在玩我的原生android库,到目前为止一切都进行得很顺利。我的操作码有问题,我不知道如何告诉radare2用特定的注册表编写str操作码,并将其指向堆栈指针和局部变量。

以下详细信息:

库通过以下方式加载:


r2 -Aw lib / arm64-v8a / libnative-lib.so


更改之前

|           ; var int local_ch @ sp+0xc
|           ; var int local_10h @ sp+0x10
|           ; var int local_18h @ sp+0x18
[...]
|           0x0000946c      e00f00f9       str x0, [sp + local_18h]
|           0x00009470      e10b00f9       str x1, [sp + local_10h]


应用更改

[0x00009470]> wa str x1,sp+local_10h
Written 4 byte(s) (str x1,sp+local_10h) = wx e10300f9


不需要输出

[0x00009470]> pd 1
|           0x00009470      e10300f9       str x1, [sp]


我想要但不知道如何获得输出(注意“ + local_10h”标签)

  [0x00009470]> pd 1
  |           0x00009470     e10b00f9       str x1, [sp + local_10h]


评论

您是否尝试使用“ wx e10b00f9”?另外,似乎您的“更改前”代码段已经包含您要编写的内容

是的,“更改前”包含我想要的输出,因为它是原始状态,我问这个问题,因为我已经更改了它,现在无法恢复它。您提供的命令可以正常运行,但是完全可以。但是它为我指明了正确的方向。我可以用“ wa str x1,sp,0x10”来写。

@Megabeets。感谢帮助!顺便说一句。我希望“ wa str x1,sp,local_10h”将得到与wa str x1,sp,0x10相同的输出(local_10h是0x10的标签),但这种方式行不通。

当然!不客气:)

#1 楼

因此,要根据注释进行排序-您可以使用两种方法进行处理。



使用原始操作码并使用wx(代表“写入十六进制”)进行写入:

wx e10b00f9



如果仍要使用wa,则可以这样操作:

wa str x1,sp,0x10



通常,可以使用afv命令和子命令来完成处理函数的局部变量。执行afv?以查看其子命令:

[0x00000000]> afv?
|Usage: afv[rbs]
| afvr[?]                     manipulate register based arguments
| afvb[?]                     manipulate bp based arguments/locals
| afvs[?]                     manipulate sp based arguments/locals
| afv*                        output r2 command to add args/locals to flagspace
| afvR [varname]              list addresses where vars are accessed (READ)
| afvW [varname]              list addresses where vars are accessed (WRITE)
| afva                        analyze function arguments/locals
| afvd name                   output r2 command for displaying the value of args/locals in the debugger
| afvn [old_name] [new_name]  rename argument/local
| afvt [name] [new_type]      change type for given argument/local
| afv-([name])                remove all or given var


通过执行afv,您将看到所有参数的列表,以及基于bpsp的局部变量。例如,通过执行afvs,您将看到所有基于堆栈指针的变量的列表。使用afvb查看基于基指针的变量。

执行以下命令后,您将看到如何定义这些变量名称:

var int local_8h @ rsp+0x8
var int local_10h @ rsp+0x10


例如,您可以看到local_8h定义了rsp+0x8local_10h定义了rsp+0x10
调试时,您可以使用afvd [var_name]来更多地了解变量。

评论


我会添加一个有关变量地址的小注释,您可以通过键入以下内容来获取它:avvd local_10h,它将导致类似“ pxr $ w @ sp + 0x10”的输出。 ”

– TheKalin
18年6月15日在6:55