0

43E010以下の逆アセンブリコードから、場所は文字列を保持する変数の場所であると推測できます(アセンブリコードのコメントのように)。

分解:

...
push    offset loc_43E010
...
push    offset aAllYourBaseAre ; "all your base are belong to us"
...
.rdata:00446074 aAllYourBaseAre db 'all your base are belong to us',0

これは、次のようなWin32アプリケーションからの逆アセンブリコードです。

class Foo {
public: 
    string mystring;    
    __declspec(dllexport) void foo();
};

void Foo::foo(){

    printf("foo called");

}

int _tmain(int argc, _TCHAR* argv[])
{
    Foo foo;
    foo.mystring =  "all your base are belong to us";

    return 0;
}

この命令push offset loc_43E010は、アドレス43E010がwin32実行可能ファイルのベースイメージからのオフセットであり、その場所が可変であることを示していますか?

4

1 に答える 1

2

私は自分のサイキック パワーを呼び出します (ハイ レイモンド!) そして、あなたがこのようなものを見ていると大げさな推測をします:

push    ebp
mov     ebp, esp
push    0FFFFFFFFh
push    offset loc_43E010
mov     eax, large fs:0
push    eax
...
mov     large fs:0, eax

これは、例外処理を使用する関数の典型的なプロローグです。あなたの場合、try/catch ステートメントはありませんが、例外が伝播された場合に呼び出す必要がある自明でないデストラクタを持つローカル変数があります。loc_43E010関数の例外ハンドラのラベルです。

したがって、答えは次のとおりです。いいえ、「変数の場所」ではありません。

Win32 (SEH および C++) での例外の詳細については、OpenRCE の記事 を参照してください。

于 2012-06-25T18:45:51.957 に答える