Fix DecodeJObject crash on x86 and close #783
This commit is contained in:
parent
6bb00dfcc4
commit
60a1e52f10
|
|
@ -7,13 +7,28 @@ namespace art {
|
||||||
|
|
||||||
class Thread : public edxp::HookedObject {
|
class Thread : public edxp::HookedObject {
|
||||||
|
|
||||||
CREATE_FUNC_SYMBOL_ENTRY(void *, DecodeJObject, void *thiz,
|
#ifdef __i386__
|
||||||
jobject obj) {
|
typedef void (*DecodeJObjectType)(void **, void *thiz, jobject obj);
|
||||||
|
inline static void (*DecodeJObjectSym)(void **, void *thiz, jobject obj);
|
||||||
|
static void *DecodeJObject(void *thiz, jobject obj) {
|
||||||
|
if (LIKELY(DecodeJObjectSym)) {
|
||||||
|
// Special call conversion
|
||||||
|
void *ret = nullptr;
|
||||||
|
DecodeJObjectSym(&ret, thiz, obj);
|
||||||
|
// Stack unbalanced since we faked return value as 1st param
|
||||||
|
__asm__("sub $0x4, %esp");
|
||||||
|
return ret;
|
||||||
|
} else
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
CREATE_FUNC_SYMBOL_ENTRY(void *, DecodeJObject, void *thiz, jobject obj) {
|
||||||
if (DecodeJObjectSym)
|
if (DecodeJObjectSym)
|
||||||
return DecodeJObjectSym(thiz, obj);
|
return DecodeJObjectSym(thiz, obj);
|
||||||
else
|
else
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Thread(void *thiz) : HookedObject(thiz) {}
|
Thread(void *thiz) : HookedObject(thiz) {}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue