以下详细信息:
库通过以下方式加载:
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]
#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
,您将看到所有参数的列表,以及基于bp
和sp
的局部变量。例如,通过执行afvs
,您将看到所有基于堆栈指针的变量的列表。使用afvb
查看基于基指针的变量。执行以下命令后,您将看到如何定义这些变量名称:
var int local_8h @ rsp+0x8
var int local_10h @ rsp+0x10
例如,您可以看到
local_8h
定义了rsp+0x8
,local_10h
定义了rsp+0x10
。调试时,您可以使用
afvd [var_name]
来更多地了解变量。评论
我会添加一个有关变量地址的小注释,您可以通过键入以下内容来获取它:avvd local_10h,它将导致类似“ pxr $ w @ sp + 0x10”的输出。 ”
– TheKalin
18年6月15日在6:55
评论
您是否尝试使用“ wx e10b00f9”?另外,似乎您的“更改前”代码段已经包含您要编写的内容是的,“更改前”包含我想要的输出,因为它是原始状态,我问这个问题,因为我已经更改了它,现在无法恢复它。您提供的命令可以正常运行,但是完全可以。但是它为我指明了正确的方向。我可以用“ wa str x1,sp,0x10”来写。
@Megabeets。感谢帮助!顺便说一句。我希望“ wa str x1,sp,local_10h”将得到与wa str x1,sp,0x10相同的输出(local_10h是0x10的标签),但这种方式行不通。
当然!不客气:)