Небесные врата с FASM (не может сделать звонок в 64-битный код) - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь реализовать Небесные врата в FASM.Это означает, что я хочу выполнить 64-битный код в 32-битной программе.

Мой код представлен ниже:

format PE GUI 4.0
entry start

include 'C:\fasm\INCLUDE\win32ax.inc'

section '.rdata' data readable writeable
    test64_other     db "test64_other", 0

section '.idata' import data readable ; writeable
    library kernel32, 'KERNEL32.DLL',\
            user32, 'USER32.DLL'

    import kernel32,    ExitProcess, 'ExitProcess'

    import user32,      MessageBoxW, 'MessageBoxW'

section '.code' code readable executable
start:

     call       $33:bits64
     push       0
     push       eax
     push       eax
     push       0
     call       [MessageBoxW]

     call       $33:bits64_other    

exit:
    invoke      ExitProcess, 0

proc bits64
    use64
        call        @f
        du          'test64',0
@@:                     
        pop         rax 

    use32
        retf
endp

proc bits64_other
    use64
        xor         rcx, rcx
        lea         rdx, [test64_other]
        lea         r8, [test64_other]
        xor         r9, r9
        call        [MessageBoxW]

    use32
        retf
endp

Первый блок сообщений ( вызов [MessageBoxW] * 1009)*) работает хорошо, но другой в proc bits64_other не работает. Код даже не компилируется, когда у меня есть вызов в этой процедуре !!

Возможно, я где-то ошибаюсь.Если у вас есть отличная идея, не могли бы вы помочь мне разобраться?

...