現在、私は「天国の門」として知られる Windows/WOW64 トリックで遊んでいます。おそらくご存知の方もいらっしゃると思いますが、x86 プログラムであっても x64 モードに入ることができます (テストしたときはとても驚きました)。そしてそれはうまくいきました!)しかし、すべてのWindowsバージョンでサポートされているわけではないことがわかっているので、私のコード(コードがあるため)はsehを使用しています。次のようになります:
start:
use32
;; setup seh...
call $33:.64bits_code ; specify 0x33 segment, it's that easy
;; success in x64 mode, quit seh...
jmp .exit
.64bits_code:
use64
;; ...
use32
retf
.seh_handler:
use32
;; ...
xor eax,eax ; EXCEPTION_CONTINUE_EXECUTION
ret
.32bits_code:
; we have been called by a far call (well, indirectly, routed by a seh handler)
; HERE IS THE PROBLEM => Should i use a retf since cs and eip are on the stack,
; or the exception has been triggered before pushing them???
; "retf" or "jmp .exit"?
.exit:
xor eax,eax
push eax
call [ExitProcess]
単純な「jmp .exit」でうまくいくことは知っていますが、それについて非常に興味があります