2

kernel32.dll から Sleep 関数を呼び出しているだけなので、このコードの何が問題なのか教えてください。何が問題なのですか? 私は Visual Studio 2008 を使用しています。どうもありがとうございました。

__asm
{
    mov eax, 77e2ef66h
    push 9999
    call eax
}
4

1 に答える 1

6

そのマジックナンバーはどこで手に入れたの77e2ef66hですか?通常、インラインアセンブラからWin32 API関数を呼び出す場合は、次のようにします。

__asm 
{ 
    push 9999 
    call Sleep
} 

Win32の関数には、固定アドレスがありません(「DLLエクスポートビューア」に表示される内容に関係なく)。関数は、ロード時に(Windows PEローダーによって)名前または序数でリンクされ、固定アドレスには配置されません。実際、関数の実際のアドレスは、Windowsのバージョン間、同じバージョンのWindows内のサブリリース間、マシン間、さらにはプログラムの実行ごとに変わる可能性があります。

(免責事項:これを行ってから非常に長い時間が経過しているため、上記のコード例の詳細は間違いなく間違っていますが、マジックナンバーを使用する必要はないことを私は知っています。)

于 2010-05-26T22:15:45.753 に答える