x64 の逆アセンブルとハンドアセンブルやってみた

x64dbg
という、X64向け デバッガ&逆アセンブラを見つけたので使いながら X64のハンドアセンブルやってみました

deb

1. X64 のファンクションコールは スタックを積んだコールは行わなくて全部レジスタ渡しっぽい。

 lea rcx,qword ptr[xxxx] // 48 8d 0d XX XX XX XX
 call GetModuleHandleA // FF 15 XX XX XX XX

 lea rdx,qword ptr[xxxx] // 48 8d 15 XX XX XX XX  
 mov rcx,rax // 48 8b c8
 call GetProcAddress // FF 15 XX XX XX XX

2. コールや文字列参照など、すべてのアドレス参照が相対アドレスっぽい

[100100] test :DB 'test',0
[100200] lea rcx,qword ptr[test] // 48 8d 0d  F9 FE FF FF (-0x100 - 7(命令コード長分))

3. スタックフレーム渡しで関数呼ばないと例外で落ちるっぽい

push rbp // 55
mov rbp,rsp // 48 8b ec
sub rsp,20 // 48 83 ec 20

処理

add rsp,20 // 48 83 c4 20
pop rbp // 5d
ret //c3

|。・ω・)。o (ちょっとめんどくさいね)

x86版もあるけど Windows 2000の場合。
DebugBreakProcess がなくて動かない
使う必然性は無いので関数の実装は放置

おすすめ

1件の返信

  1. azure_crystal_ より:

    これからx64とかの勉強を始めようと思っていたので助かりました!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です