Я пытаюсь реализовать Небесные врата в 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 не работает. Код даже не компилируется, когда у меня есть вызов в этой процедуре !!
Возможно, я где-то ошибаюсь.Если у вас есть отличная идея, не могли бы вы помочь мне разобраться?