am 910b7a8b: am 17361134: Merge "Add a "smash-stack" option to crasher."
# Via Android Git Automerger (1) and others * commit '910b7a8b88b29ee16c6014630b450dda56c5d578': Add a "smash-stack" option to crasher.
This commit is contained in:
commit
3b7c584fe9
|
@ -37,6 +37,7 @@ LOCAL_SRC_FILES += $(TARGET_ARCH)/crashglue.S
|
|||
LOCAL_MODULE := crasher
|
||||
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_CFLAGS += -fstack-protector-all
|
||||
#LOCAL_FORCE_STATIC_EXECUTABLE := true
|
||||
LOCAL_SHARED_LIBRARIES := libcutils libc
|
||||
include $(BUILD_EXECUTABLE)
|
||||
|
|
|
@ -35,6 +35,18 @@ static void debuggerd_connect()
|
|||
}
|
||||
}
|
||||
|
||||
int smash_stack(int i) {
|
||||
printf("crasher: deliberately corrupting stack...\n");
|
||||
// Unless there's a "big enough" buffer on the stack, gcc
|
||||
// doesn't bother inserting checks.
|
||||
char buf[8];
|
||||
// If we don't write something relatively unpredicatable
|
||||
// into the buffer and then do something with it, gcc
|
||||
// optimizes everything away and just returns a constant.
|
||||
*(int*)(&buf[7]) = (uintptr_t) &buf[0];
|
||||
return *(int*)(&buf[0]);
|
||||
}
|
||||
|
||||
void test_call1()
|
||||
{
|
||||
*((int*) 32) = 1;
|
||||
|
@ -95,6 +107,7 @@ int do_action(const char* arg)
|
|||
return do_action_on_thread(arg + strlen("thread-"));
|
||||
}
|
||||
|
||||
if(!strcmp(arg,"smash-stack")) return smash_stack(42);
|
||||
if(!strcmp(arg,"nostack")) crashnostack();
|
||||
if(!strcmp(arg,"ctest")) return ctest();
|
||||
if(!strcmp(arg,"exit")) exit(1);
|
||||
|
|
Loading…
Reference in New Issue