我正在重新编译Java程序,我有以下方法:
public static native String getMyString(String s);
getMyString
在mylibrary.so中实现,如下所示:
; Scrambler::getMyString(char const*)
EXPORT _ZN9Scrambler18getMyStringEPKc
_ZN9Scrambler18getMyStringEPKc
LDR R1, =(mystring - 0x14FC8)
PUSH {R4-R6,LR}
ADD R1, PC ; "mystring"
MOV R4, R0
BLX strcasecmp
CMP R0, #0
BNE.W loc_150FC
最终在
LDR R5, =(unk_6AE24 - 0x14FD8)
ADD R5, PC
此处R5
似乎是返回值。
unk_6AE24
如下所示:
27
68 5D 6D 06 3F 10 6D 26 32 10 56 12 06 3F 32 5D
12 27 26 4B 0D 5D 27 4B 6E 0D 2B 06 32 5D 68 24
3F 32 06 24 70 56 00 63 69 4C 1D 06 5A 7F 0C 34
1E 67 3B 63 32 5F 16 1D 34 5F 1E 32 42 69 18 49
3F 51 49 0C 1F 0C 0E 77 2F 44 69 7F 5A 0C 0B 34
0C 34 1C 24 32 5F 7F 00 00 00 00 1D 30 3B 5F 30
IDA建议,有问题的字符串是27 68 5D 6D
或“'h] m”,但我有疑虑。当我使用c ++很久以前,字符串过去以0结尾,这将使返回值为27 68 5D 6D 06 3F 10 6D 26 32 10 56 12 06 3F 32 5D 12 27 26 4B 0D 5D 27 4B 6E 0D 2B 06 32 5D 68 24 3F 32 06 24 70 56
。或者我们可以谈论java字符串,它可能有自己的格式。
getMyString
会返回哪种字符串?
答案 0 :(得分:1)
getMyString会返回什么类型的字符串?
它将返回java.lang.String
,您可以从声明中获得。
实际的角色数据(可能)将是一个重定向。 (String
可能是指向char
数组和大小的指针。请记住,在Java中,char
是16位。
无论如何,你还想做什么?在getMyString
返回后立即设置断点并查看调试器中的返回值会更容易。