0

私は次のコードを持っています:

CMP BYTE PTR [ESP+5],61    ; ESP is 0012F9AC
JNZ SHORT ....

以下、記憶にある

Address  Data

0012F9AC 0012FA94
0012F9B0 61616161
0012F9B4 61616161

今、私が理解している方法は、0x61 を (0x0012F9AC + 5) の値、つまり 0x12F9B1 と比較していることです。メモリ「ダンプ」によると、アドレス 0x12F9B1 の値は 0x61 です。では、なぜまだジャンプをすることに固執しているのですか?

4

3 に答える 3

0

元の質問はこれを引用しています:

    Address  Data

    0012F9AC 0012FA94
    0012F9B0 61616161
    0012F9B4 61616161

これは、次の点を明確に示しています。

  1. これは、16 進数のメモリ ダンプです。
  2. 0012F9B0 で始まるメモリは、8 個の小文字の「a」ansi 文字 (1 文字あたり 1 バイト) で埋められます。

Gunner の答えは、この質問に対して完全に偽物です。これらの「a」はそこにあり、それらへのポインタではありません!

ただし、他の人が指摘したように、まともなアセンブラは、次の行を見ると: ...

CMP バイト PTR [ESP+5],61 ; ESP は 0012F9AC

... 上記の ",61" は 10 進数として解釈されるため、10 進数の 61 は 16 進数の 61 と等しくないため、比較は失敗します。これが、比較が失敗する本当の理由です。

次のように修正してください:

CMP バイト PTR [ESP+5],61h ; ESP は 0012F9AC

問題は解決しました。

于 2012-12-05T12:22:46.107 に答える