JVM Launcher Main 解析

  |   0 评论   |   909 浏览

int
main(int argc, char **argv)
{
    int margc;
    char** margv;
    const jboolean const_javaw = JNI_FALSE;
#endif /* JAVAW */
#ifdef _WIN32
    {
        int i = 0;
        if (getenv(JLDEBUG_ENV_ENTRY) != NULL) {
            printf("Windows original main args:\n");
            for (i = 0 ; i < __argc ; i++) {
                printf("wwwd_args[%d] = %s\n", i, __argv[i]);
            }
        }
    }
    JLI_CmdToArgs(GetCommandLine());
    margc = JLI_GetStdArgc();
    // add one more to mark the end
    margv = (char **)JLI_MemAlloc((margc + 1) * (sizeof(char *)));
    {
        int i = 0;
        StdArg *stdargs = JLI_GetStdArgs();
        for (i = 0 ; i < margc ; i++) {
            margv[i] = stdargs[i].arg;
        }
        margv[i] = NULL;
    }
#else /* *NIXES */
    margc = argc;
    margv = argv;
#endif /* WIN32 */
    return JLI_Launch(margc, margv,
                   sizeof(const_jargs) / sizeof(char *), const_jargs,
                   sizeof(const_appclasspath) / sizeof(char *), const_appclasspath,
                   FULL_VERSION,
                   DOT_VERSION,
                   (const_progname != NULL) ? const_progname : *margv,
                   (const_launcher != NULL) ? const_launcher : *margv,
                   (const_jargs != NULL) ? JNI_TRUE : JNI_FALSE,
                   const_cpwildcard, const_javaw, const_ergo_class);
}
Dump of assembler code for function main:
   0x0000561c07a56890 <+0>:	push   %rbp
   0x0000561c07a56891 <+1>:	mov    %rsp,%rbp
   0x0000561c07a56894 <+4>:	push   %rbx
   0x0000561c07a56895 <+5>:	sub    $0x28,%rsp
   0x0000561c07a56899 <+9>:	mov    %edi,-0x24(%rbp)
   0x0000561c07a5689c <+12>:	mov    %rsi,-0x30(%rbp)
   0x0000561c07a568a0 <+16>:	movb   $0x0,-0x1d(%rbp)
   0x0000561c07a568a4 <+20>:	mov    -0x24(%rbp),%eax
   0x0000561c07a568a7 <+23>:	mov    %eax,-0x1c(%rbp)
   0x0000561c07a568aa <+26>:	mov    -0x30(%rbp),%rax
   0x0000561c07a568ae <+30>:	mov    %rax,-0x18(%rbp)
   0x0000561c07a568b2 <+34>:	mov    $0x0,%ebx
   0x0000561c07a568b7 <+39>:	movzbl -0x1d(%rbp),%r10d
   0x0000561c07a568bc <+44>:	mov    $0x1,%eax
=> 0x0000561c07a568c1 <+49>:	movzbl %al,%r9d
   0x0000561c07a568c5 <+53>:	mov    0x2007b4(%rip),%rax        # 0x561c07c57080 <const_jargs>
   0x0000561c07a568cc <+60>:	test   %rax,%rax
   0x0000561c07a568cf <+63>:	setne  %al
   0x0000561c07a568d2 <+66>:	movzbl %al,%r8d
   0x0000561c07a568d6 <+70>:	mov    0x200793(%rip),%rax        # 0x561c07c57070 <const_launcher>
   0x0000561c07a568dd <+77>:	test   %rax,%rax
   0x0000561c07a568e0 <+80>:	jne    0x561c07a568eb <main+91>
   0x0000561c07a568e2 <+82>:	mov    -0x18(%rbp),%rax
   0x0000561c07a568e6 <+86>:	mov    (%rax),%rdx
   0x0000561c07a568e9 <+89>:	jmp    0x561c07a568f2 <main+98>
0x0000561c07a568eb <+91>:	mov    0x20077e(%rip),%rdx        # 0x561c07c57070 <const_launcher>
   0x0000561c07a568f2 <+98>:	mov    0x20076f(%rip),%rax        # 0x561c07c57068 <const_progname>
   0x0000561c07a568f9 <+105>:	test   %rax,%rax
   0x0000561c07a568fc <+108>:	jne    0x561c07a56907 <main+119>
   0x0000561c07a568fe <+110>:	mov    -0x18(%rbp),%rax
   0x0000561c07a56902 <+114>:	mov    (%rax),%rax
   0x0000561c07a56905 <+117>:	jmp    0x561c07a5690e <main+126>
   0x0000561c07a56907 <+119>:	mov    0x20075a(%rip),%rax        # 0x561c07c57068 <const_progname>
   0x0000561c07a5690e <+126>:	mov    0x200773(%rip),%r11        # 0x561c07c57088 <const_appclasspath>
   0x0000561c07a56915 <+133>:	mov    0x200764(%rip),%rcx        # 0x561c07c57080 <const_jargs>
   0x0000561c07a5691c <+140>:	mov    -0x18(%rbp),%rsi
   0x0000561c07a56920 <+144>:	mov    -0x1c(%rbp),%edi
   0x0000561c07a56923 <+147>:	push   %rbx
   0x0000561c07a56924 <+148>:	push   %r10
   0x0000561c07a56926 <+150>:	push   %r9
   0x0000561c07a56928 <+152>:	push   %r8
   0x0000561c07a5692a <+154>:	push   %rdx
   0x0000561c07a5692b <+155>:	push   %rax
   0x0000561c07a5692c <+156>:	lea    0xf5(%rip),%rax        # 0x561c07a56a28
   0x0000561c07a56933 <+163>:	push   %rax
   0x0000561c07a56934 <+164>:	lea    0xf5(%rip),%rax        # 0x561c07a56a30
   0x0000561c07a5693b <+171>:	push   %rax
   0x0000561c07a5693c <+172>:	mov    %r11,%r9
   0x0000561c07a5693f <+175>:	mov    $0x1,%r8d

评论

发表评论


取消