中断调用之猜想

launcher.asm中,使用了launch_applications过程三次调用了int 0x40去启动3个应用,构成了桌面背景,桌面图标和底部任务栏。这三次调用使用了eax,放置调用号19ebx放置了应用的名称,ecx放置了参数BOOT。那么到了start_application_fl过程中,怎么eax指向了应用名称,而ebx指向了传递的参数了呢?

int 0x40(sys32.inc)->syscall_startapp(kernel.asm)->start_application_fl(sys32.inc)->start_app_c(sys32.inc)->add_app_parameters(sys32.inc)。

在i40过程中(sys32.inc中第623)行有如下一段代码:

     pusha

    mov edi,[esi+l.eax-tss_sceleton]
    mov eax,[esi+l.ebx-tss_sceleton]
    mov ebx,[esi+l.ecx-tss_sceleton]
    mov ecx,[esi+l.edx-tss_sceleton]
    mov edx,[esi+l.esi-tss_sceleton]
    mov esi,[esi+l.edi-tss_sceleton]

    sti
    push eax
    and edi,0xff
    call dword [servetable+edi*4]
    pop eax
    cli

    popa

 

从这段代码中,大致可以猜到,中断后的edi中是调用者的eax,ebx中放置的是调用者eax,而ebx放置的是调用者的ecx值。而call dword [servetable+edi*4]则调用了syscall_startapp。

posted on 2022-09-05 17:14  oemwang  阅读(55)  评论(0)    收藏  举报

导航