⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ap_hook.c

📁 apach加密模块
💻 C
📖 第 1 页 / 共 3 页
字号:
        void *v2 = va_arg(ap, va_type(ptr));        void *v3 = va_arg(ap, va_type(ptr));        *((int *)v_rc) = ((int(*)(int, void *, void *))(hf->hf_ptr))(v1, v2, v3);        rc = (*((int *)v_rc) != he->he_modeval.v_int);    }    else if (he->he_sig == AP_HOOK_SIG4(int, ptr, int, int)) {        /* Call: int func(ptr,int,int) */        void *v1 = va_arg(ap, va_type(ptr));        int   v2 = va_arg(ap, va_type(int));        int   v3 = va_arg(ap, va_type(int));        *((int *)v_rc) = ((int(*)(void *, int, int))(hf->hf_ptr))(v1, v2, v3);        rc = (*((int *)v_rc) != he->he_modeval.v_int);    }    else if (he->he_sig == AP_HOOK_SIG4(int, ptr, int, ptr)) {        /* Call: int func(ptr,int,ptr) */        void *v1 = va_arg(ap, va_type(ptr));        int   v2 = va_arg(ap, va_type(int));        void *v3 = va_arg(ap, va_type(ptr));        *((int *)v_rc) = ((int(*)(void *, int, void *))(hf->hf_ptr))(v1, v2, v3);        rc = (*((int *)v_rc) != he->he_modeval.v_int);    }    else if (he->he_sig == AP_HOOK_SIG4(int, ptr, ptr, int)) {        /* Call: int func(ptr,ptr,int) */        void *v1 = va_arg(ap, va_type(ptr));        void *v2 = va_arg(ap, va_type(ptr));        int   v3 = va_arg(ap, va_type(int));        *((int *)v_rc) = ((int(*)(void *, void *, int))(hf->hf_ptr))(v1, v2, v3);        rc = (*((int *)v_rc) != he->he_modeval.v_int);    }    else if (he->he_sig == AP_HOOK_SIG4(int, ptr, ptr, ptr)) {        /* Call: int func(ptr,ptr,ptr) */        void *v1 = va_arg(ap, va_type(ptr));        void *v2 = va_arg(ap, va_type(ptr));        void *v3 = va_arg(ap, va_type(ptr));        *((int *)v_rc) = ((int(*)(void *, void *, void *))(hf->hf_ptr))(v1, v2, v3);        rc = (*((int *)v_rc) != he->he_modeval.v_int);    }    else if (he->he_sig == AP_HOOK_SIG4(ptr, int, int, int)) {        /* Call: ptr func(int,int,int) */        int   v1 = va_arg(ap, va_type(int));        int   v2 = va_arg(ap, va_type(int));        int   v3 = va_arg(ap, va_type(int));        *((void * *)v_rc) = ((void *(*)(int, int, int))(hf->hf_ptr))(v1, v2, v3);        rc = (*((void * *)v_rc) != he->he_modeval.v_ptr);    }    else if (he->he_sig == AP_HOOK_SIG4(ptr, int, int, ptr)) {        /* Call: ptr func(int,int,ptr) */        int   v1 = va_arg(ap, va_type(int));        int   v2 = va_arg(ap, va_type(int));        void *v3 = va_arg(ap, va_type(ptr));        *((void * *)v_rc) = ((void *(*)(int, int, void *))(hf->hf_ptr))(v1, v2, v3);        rc = (*((void * *)v_rc) != he->he_modeval.v_ptr);    }    else if (he->he_sig == AP_HOOK_SIG4(ptr, int, ptr, int)) {        /* Call: ptr func(int,ptr,int) */        int   v1 = va_arg(ap, va_type(int));        void *v2 = va_arg(ap, va_type(ptr));        int   v3 = va_arg(ap, va_type(int));        *((void * *)v_rc) = ((void *(*)(int, void *, int))(hf->hf_ptr))(v1, v2, v3);        rc = (*((void * *)v_rc) != he->he_modeval.v_ptr);    }    else if (he->he_sig == AP_HOOK_SIG4(ptr, int, ptr, ptr)) {        /* Call: ptr func(int,ptr,ptr) */        int   v1 = va_arg(ap, va_type(int));        void *v2 = va_arg(ap, va_type(ptr));        void *v3 = va_arg(ap, va_type(ptr));        *((void * *)v_rc) = ((void *(*)(int, void *, void *))(hf->hf_ptr))(v1, v2, v3);        rc = (*((void * *)v_rc) != he->he_modeval.v_ptr);    }    else if (he->he_sig == AP_HOOK_SIG4(ptr, ptr, int, int)) {        /* Call: ptr func(ptr,int,int) */        void *v1 = va_arg(ap, va_type(ptr));        int   v2 = va_arg(ap, va_type(int));        int   v3 = va_arg(ap, va_type(int));        *((void * *)v_rc) = ((void *(*)(void *, int, int))(hf->hf_ptr))(v1, v2, v3);        rc = (*((void * *)v_rc) != he->he_modeval.v_ptr);    }    else if (he->he_sig == AP_HOOK_SIG4(ptr, ptr, int, ptr)) {        /* Call: ptr func(ptr,int,ptr) */        void *v1 = va_arg(ap, va_type(ptr));        int   v2 = va_arg(ap, va_type(int));        void *v3 = va_arg(ap, va_type(ptr));        *((void * *)v_rc) = ((void *(*)(void *, int, void *))(hf->hf_ptr))(v1, v2, v3);        rc = (*((void * *)v_rc) != he->he_modeval.v_ptr);    }    else if (he->he_sig == AP_HOOK_SIG4(ptr, ptr, ptr, int)) {        /* Call: ptr func(ptr,ptr,int) */        void *v1 = va_arg(ap, va_type(ptr));        void *v2 = va_arg(ap, va_type(ptr));        int   v3 = va_arg(ap, va_type(int));        *((void * *)v_rc) = ((void *(*)(void *, void *, int))(hf->hf_ptr))(v1, v2, v3);        rc = (*((void * *)v_rc) != he->he_modeval.v_ptr);    }    else if (he->he_sig == AP_HOOK_SIG4(ptr, ptr, ptr, ptr)) {        /* Call: ptr func(ptr,ptr,ptr) */        void *v1 = va_arg(ap, va_type(ptr));        void *v2 = va_arg(ap, va_type(ptr));        void *v3 = va_arg(ap, va_type(ptr));        *((void * *)v_rc) = ((void *(*)(void *, void *, void *))(hf->hf_ptr))(v1, v2, v3);        rc = (*((void * *)v_rc) != he->he_modeval.v_ptr);    }    else if (he->he_sig == AP_HOOK_SIG5(int, ptr, ptr, ptr, int)) {        /* Call: int func(ptr,ptr,ptr,int) */        void *v1 = va_arg(ap, va_type(ptr));        void *v2 = va_arg(ap, va_type(ptr));        void *v3 = va_arg(ap, va_type(ptr));        int   v4 = va_arg(ap, va_type(int));        *((int *)v_rc) = ((int(*)(void *, void *, void *, int))(hf->hf_ptr))(v1, v2, v3, v4);        rc = (*((int *)v_rc) != he->he_modeval.v_int);    }    else if (he->he_sig == AP_HOOK_SIG6(int, ptr, ptr, ptr, int, ptr)) {        /* Call: int func(ptr,ptr,ptr,int,ptr) */        void *v1 = va_arg(ap, va_type(ptr));        void *v2 = va_arg(ap, va_type(ptr));        void *v3 = va_arg(ap, va_type(ptr));        int   v4 = va_arg(ap, va_type(int));        void *v5 = va_arg(ap, va_type(ptr));        *((int *)v_rc) = ((int(*)(void *, void *, void *, int, void *))(hf->hf_ptr))(v1, v2, v3, v4, v5);        rc = (*((int *)v_rc) != he->he_modeval.v_int);    }    else if (he->he_sig == AP_HOOK_SIG6(int, ptr, ptr, ptr, ptr, int)) {        /* Call: int func(ptr,ptr,ptr,ptr,int) */        void *v1 = va_arg(ap, va_type(ptr));        void *v2 = va_arg(ap, va_type(ptr));        void *v3 = va_arg(ap, va_type(ptr));        void *v4 = va_arg(ap, va_type(ptr));        int   v5 = va_arg(ap, va_type(int));        *((int *)v_rc) = ((int(*)(void *, void *, void *, void *, int))(hf->hf_ptr))(v1, v2, v3, v4, v5);        rc = (*((int *)v_rc) != he->he_modeval.v_int);    }    else if (he->he_sig == AP_HOOK_SIG7(int, ptr, ptr, ptr, ptr, int, ptr)) {        /* Call: int func(ptr,ptr,ptr,ptr,int,ptr) */        void *v1 = va_arg(ap, va_type(ptr));        void *v2 = va_arg(ap, va_type(ptr));        void *v3 = va_arg(ap, va_type(ptr));        void *v4 = va_arg(ap, va_type(ptr));        int   v5 = va_arg(ap, va_type(int));        void *v6 = va_arg(ap, va_type(ptr));        *((int *)v_rc) = ((int(*)(void *, void *, void *, void *, int, void *))(hf->hf_ptr))(v1, v2, v3, v4, v5, v6);        rc = (*((int *)v_rc) != he->he_modeval.v_int);    }    else if (he->he_sig == AP_HOOK_SIG6(ptr, ptr, ptr, ptr, ptr, ptr)) {        /* Call: ptr func(ptr,ptr,ptr,ptr,ptr) */        void *v1 = va_arg(ap, va_type(ptr));        void *v2 = va_arg(ap, va_type(ptr));        void *v3 = va_arg(ap, va_type(ptr));        void *v4 = va_arg(ap, va_type(ptr));        void *v5 = va_arg(ap, va_type(ptr));        *((void * *)v_rc) = ((void *(*)(void *, void *, void *, void *, void *))(hf->hf_ptr))(v1, v2, v3, v4, v5);        rc = (*((void * *)v_rc) != he->he_modeval.v_ptr);    }    else if (he->he_sig == AP_HOOK_SIG2(void, ptr)) {        /* Call: void func(ptr) */        void *v1 = va_arg(ap, va_type(ptr));        ((void(*)(void *))(hf->hf_ptr))(v1);    }    else if (he->he_sig == AP_HOOK_SIG4(void, ptr, int, int)) {        /* Call: void func(ptr,int,int) */        void *v1 = va_arg(ap, va_type(ptr));        int   v2 = va_arg(ap, va_type(int));        int   v3 = va_arg(ap, va_type(int));        ((void(*)(void *, int, int))(hf->hf_ptr))(v1, v2, v3);    }    else if (he->he_sig == AP_HOOK_SIG3(void, ptr, ptr)) {        /* Call: void func(ptr,ptr) */        void *v1 = va_arg(ap, va_type(ptr));        void *v2 = va_arg(ap, va_type(ptr));        ((void(*)(void *, void *))(hf->hf_ptr))(v1, v2);    }    else if (he->he_sig == AP_HOOK_SIG4(void, ptr, ptr, ptr)) {        /* Call: void func(ptr,ptr,ptr) */        void *v1 = va_arg(ap, va_type(ptr));        void *v2 = va_arg(ap, va_type(ptr));        void *v3 = va_arg(ap, va_type(ptr));        ((void(*)(void *, void *, void *))(hf->hf_ptr))(v1, v2, v3);    }    else if (he->he_sig == AP_HOOK_SIG5(void, ptr, ptr, ptr, ptr)) {        /* Call: void func(ptr,ptr,ptr,ptr) */        void *v1 = va_arg(ap, va_type(ptr));        void *v2 = va_arg(ap, va_type(ptr));        void *v3 = va_arg(ap, va_type(ptr));        void *v4 = va_arg(ap, va_type(ptr));        ((void(*)(void *, void *, void *, void *))(hf->hf_ptr))(v1, v2, v3, v4);    }    /* ----END GENERATED SECTION---------- */    else        ap_log_assert("hook signature not implemented", __FILE__, __LINE__);    if (he->he_modeid == AP_HOOK_MODE_ALL)        rc = FALSE;    else if (he->he_modeid == AP_HOOK_MODE_TOPMOST)        rc = TRUE;    return rc;}#endif /* EAPI *//*=cut####  Embedded Perl script for generating the dispatch section##require 5.003;use strict;#   configurationmy $file  = $0;my $begin = '----BEGIN GENERATED SECTION--------';my $end   = '----END GENERATED SECTION----------';#   special command: find used signaturesif ($ARGV[0] eq 'used') {    my @S = `find .. -type f -name "*.c" -print`;    my $s;    my %T = ();    foreach $s (@S) {        $s =~ s|\n$||;        open(FP, "<$s") || die;        my $source = '';        $source .= $_ while (<FP>);        close(FP);        my %seen = ();        sub printme {            my ($src, $hook, $sig) = @_;            return if ($seen{$hook} == 1);            $seen{$hook} = 1;            my ($rc, $args) = ($sig =~ m|^([^,]+)(.*)$|);            $args =~ s|^,||;            $src =~ s|^.+/||;            my $sig = sprintf("%-6sfunc(%s)", $rc, $args);            $T{$sig}++;         }        $source =~ s|\("([^"]+)",\s*AP_HOOK_SIG[0-9]\((.+?)\)|&printme($s, $1, $2), ''|sge;    }    my $t;    foreach $t (sort(keys(%T))) {        printf("     *    %-40s [%dx]\n", $t, $T{$t});    }    exit(0);}#   read ourself and keep a backupopen(FP, "<$file") || die;my $source = '';$source .= $_ while (<FP>);close(FP);open(FP, ">$file.bak") || die;print FP $source;close(FP);#   now parse the signature lines and update the codemy $o = '';my $next = 0;my $line;my %seen = ();foreach $line (split(/\n/, $source)) {    next if (not $line =~ m|\*\s+\S+\s+func\(.*\)|);    my ($sig, $rc, $param) = ($line =~ m|\*\s+((\S+)\s+func\((.*?)\))|);    $sig =~ s|\s+| |g;    next if ($seen{$sig} == 1);    $seen{$sig} = 1;    print "Generating code for `$sig'\n";    my @S = ($rc, split(/[\s,]+/, $param));    my @RS = @S;    my $i;    for ($i = 0; $i <= $#RS; $i++) {        $RS[$i] = 'void *' if ($RS[$i] eq 'ptr');        $RS[$i] = 'void *' if ($RS[$i] eq 'ctx');    }    $o .= "else " if ($next); $next++;    $o .= sprintf("if (he->he_sig == AP_HOOK_SIG%d(%s)) {\n", $#S+1, join(', ',@S));    $o .= sprintf("    \/\* Call: %s \*\/\n", $sig);    for ($i = 1; $i <= $#S; $i++) {        $o .= sprintf("    %-6sv%d = va_arg(ap, va_type(%s));\n", $RS[$i], $i, $S[$i]);    }    $o .= "    ";    $o .= sprintf("*((%s *)v_rc) = ", $RS[0]) if ($S[0] ne 'void');    $o .= sprintf("((%s(*)(%s))(hf->hf_ptr))", $RS[0], join(', ', @RS[1..$#RS]));    $o .= "(";    for ($i = 1; $i <= $#S; $i++) {        $o .= "hf->hf_ctx" if ($S[$i] eq 'ctx');        $o .= sprintf("v%d", $i) if ($S[$i] ne 'ctx');        $o .= ", " if ($i < $#S);    }    $o .= ");\n";    $o .= sprintf("    rc = (*((%s *)v_rc) != he->he_modeval.v_%s);\n",                   $RS[0], $S[0]) if ($S[0] ne 'void');    $o .= "}\n";}#   insert the generated code at the target location$o =~ s|^|    |mg;$source =~ s|(\/\* $begin.+?\n).*\n(.*?\/\* $end)|$1$o$2|s;#   and update the source on diskprint "Updating file `$file'\n";open(FP, ">$file") || die;print FP $source;close(FP);=pod*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -