2

我正在重新编译一个 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会返回什么样的字符串?

4

1 回答 1

1

getMyString 会返回什么样的字符串?

它会返回一个java.lang.String,你可以从声明中得到它。

实际的字符数据将(可能)是一个远离那个的重定向。(aString可能是指向char数组和大小的指针)。请记住,在 Java 中,achar是 16 位。

你到底想做什么?在返回后立即设置断点getMyString并在调试器中查看返回值要容易得多。

于 2012-08-02T16:40:38.100 回答