如何将 arm 指令插入本机库中的函数中?

逆向工程 拆卸 手臂 登记 图书馆
2021-07-08 01:43:59

我是新手,仍在学习汇编语言。在已反汇编的本机 android 应用程序库中,我发现此函数有 1 条指令。

addres    hex     arm instruction                            function
2cc3ad   71704708 stmdaeq r7, {r0, r4, r5, r6, ip, sp, lr} ^ function0(unsigned char)

我在文章中读到用于调用函数的参数分别存储在 r0、r1 和 r2 上。我想将 200 添加到寄存器 r0 中,以便指令可以将值存储到这些寄存器引用的内存中。所以我在地址 2cc3ad 处插入了 aa mov 指令的十六进制值,以便在十六进制编辑器中它看起来像这样。 mov ro, #200C800A0E3十六进制的。

address     Hex              Instruction    
2cc3ad      C800A0E3         mov ro, #200   
2cc3b1      71704708         stmdaeq r7, {r0, r4, r5, r6, ip, sp, lr} ^

编辑并添加这些字节后,我保存到文件中。在使用编辑后的库之前,我尝试重新组装它,但反汇编程序以及使用该库的应用程序都出现错误。根据我的理解,通过将该字节添加到库中,我破坏了整个文件。有没有一种方法或指令可以用来将某个值分配给 r0 或将该值存储到该函数中那些寄存器引用的内存中,而无需修改整个库?

1个回答

实际上我需要做的是分支到一个空的代码洞穴并在那里插入我的代码。此外,我使用的反汇编器没有正确分析函数,例如,这个71704708十六进制值在另一个反汇编器上被解码为拇指指令集,而在我第一次使用的反汇编器上,它是一个 ARM 指令集。函数的起始地址也不正确。