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
。