Ejemplo n.º 1
0
void __libc_longjmp(sigjmp_buf env,int val) {
  if (env[0].__mask_was_saved) {
    sigprocmask(SIG_SETMASK,(sigset_t*)&env[0].__saved_mask,0);
  }
  if (val==0) val=1;
  __longjmp(env[0].__jmpbuf,val);
}
Ejemplo n.º 2
0
//
// longjmp
//
_Noreturn void (longjmp)(jmp_buf env, int val)
{
   if(!val)
      val = 1;

   __longjmp(env, val);
}
Ejemplo n.º 3
0
void ____longjmp_chk (__jmp_buf env, int val)
{
  void *this_frame = __builtin_frame_address (0);
  void *saved_frame = JB_FRAME_ADDRESS (env);
  INTERNAL_SYSCALL_DECL (err);
  stack_t ss;

  /* If "env" is from a frame that called us, we're all set.  */
  if (called_from(this_frame, saved_frame))
    __longjmp (env, val);

  /* If we can't get the current stack state, give up and do the longjmp. */
  if (INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &ss) != 0)
    __longjmp (env, val);

  /* If we we are executing on the alternate stack and within the
     bounds, do the longjmp.  */
  if (ss.ss_flags == SS_ONSTACK &&
      (this_frame >= ss.ss_sp && this_frame < (ss.ss_sp + ss.ss_size)))
    __longjmp (env, val);

  __fortify_fail ("longjmp causes uninitialized stack frame");
}
Ejemplo n.º 4
0
int main(int argc, char* argv[])
{
    HMODULE h = NULL;
    FILE* fp = NULL;
    jmp_buf env;
    int i;
    char* buf;
    ucontext_t context;

    h = LoadLibrary("windll.dll");
    if (h != NULL) {
        pFunc = (void*)GetProcAddress(h, "windll");
        if (pFunc != NULL) {
            printf("winmain: Call windll\n");
            pFunc();
        }
    }

    if (argc >= 3) {
        memcpy(env, argv[argc-2], sizeof(jmp_buf));
        sscanf(argv[argc-1], "%p", &__longjmp);

        fp = fopen("__funp.txt", "w");
        if (fp != NULL)
            fprintf(fp, "%p\n", pFunc);
        fclose(fp);

        fp = fopen("__env.bin", "rb");
        if (fp != NULL)
            fread(&context, sizeof(char), sizeof(ucontext_t), fp);
        fclose(fp);
        setcontext(&context);

        __longjmp(env, 2);
        printf("Never Executed!\n");
    }
}
Ejemplo n.º 5
0
PJ_DEF(void) pj_longjmp(pj_jmp_buf env, int val)
{
    __longjmp(env, val);
}
Ejemplo n.º 6
0
void    RTSuicide( void )
{
    if( __SpawnStack == NULL )
        exit( -1 );
    __longjmp( *__SpawnStack, 1 );
}