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は、問題の文字列は「'h] m」であると示唆していますが27 68 5D 6D
、私には疑問があります。私が何年も前に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
返されますか?