5

Visual Studio 2012 Expressで小さな C プログラムを作成し、それらをImmunity Debuggerで逆アセンブルすることで、少しのアセンブリを自分自身に教えようとしています。しかし、私は明らかに私が理解できない何かに出くわしました:

012A13F0   68 58582A01      PUSH OFFSET Hello_Wo.??_C@_0M@KPLPPDAC@H>; ASCII "Hello World"
012A13F5   FF15 BC922A01    CALL DWORD PTR DS:[<&MSVCR110D.printf>]  ; MSVCR110.printf

私はこれらの両方の指示に混乱しています。実際、オペコードは、デバッガーによって表示される実際の命令よりも意味があります。

明らかに、最初の命令はアドレスをスタックにプッシュします。ダンプ内のアドレスをたどると、string を構成する 16 進数を含む領域が表示されますHello World。これは だと思います.data segment。私は正しいですか?

そしてまた; デバッガーによって提供された視覚的な支援にすぎないと思うHello_Wo.??_C@_0M@... ので、これが...何か...

しかし、このプッシュ命令のOFFSETは何を意味するのでしょうか? Googleで何も見つけられませんでした。

また、その他の指導についてお聞きしたいのですが...

DS:[102A92BC] (&MSVCR110D...)私が理解している限りでは、アドレスにある 4 バイトの値を呼び出しのアドレスとして使用して、ルーチンを呼び出そうとしています。

デバッガーはそれを教えてくれますDS:[102A92BC] = 5C0A93A0。そして、そのメモリ範囲は MSVCR110 用に予約されています.text segment

大変申し訳ありませんが、どのように質問すればよいかさえよくわからなかったので、この質問をするのに苦労しました。お分かりできると良いのですが。そしてありがとうございました。

トピック外:最後にもう 1 つ質問がありますが、それは少しばかげていて、トピックから外れていますが、気にしないでください: データ セグメントを逆アセンブル コードとして読み取ることは想定されていませんよね? imports データ セグメントは、 の検索で私を混乱させました5C0A93A0

4

1 に答える 1