演算子 | ※ 説明 ※ |
+ |
加算演算子。算術演算子の一つ。前後2つのオペランドを加算します。
※この結果は0x0420 です。
|
- |
減算演算子。算術演算子の一つ。前のオペランドから後ろのオペランドを減算します。
※この結果は0x03E0 です。
|
* |
乗算演算子。算術演算子の一つ。前後2つのオペランドを乗算(掛け合わせる)します。
※この結果は0x8000 です。
|
/ |
除算演算子。算術演算子の一つ。前のオペランドを後ろのオペランドで除算した(割った)商を返します。
※この結果は0x20 です。
|
% |
除算演算子。算術演算子の一つ。前のオペランドを後ろのオペランドで除算した(割った)剰余(余り)を返します。
※この結果は0 です。
|
& |
ビットごとのAND演算子。算術演算子の一つ。前後2つのオペランドでビットごとに論理積を取ります。
※この結果は0 です。
|
^ |
ビットごとのXOR演算子。算術演算子の一つ。前後2つのオペランドでビットごとに排他論理和を取ります。
※この結果は0x401 です。
|
| |
ビットごとのOR演算子。算術演算子の一つ。前後2つのオペランドでビットごとに論理和を取ります。
※この結果は0x420 です。
|
~ |
ビットごとのNOT演算子。拡張された算術演算子の一つ。後ろのオペランドに0でないビットが存在するとき、前のオペランドの対応するビットを反転(論理否定)させます。
※この結果は0x410 です。 (0x30は2進数で11 0000。0x20は2進数で10 0000。0x10は2進数で01 0000。)
|
< |
関係演算子の一つ。前のオペランドが後ろのオペランドより小さいなら、1 を返し、それ以外なら0 を返します。
※この結果は0 です。
|
<= |
関係演算子の一つ。前のオペランドが後ろのオペランド以下なら、1 を返し、それ以外なら0 を返します。
※この結果は0 です。
|
> |
関係演算子の一つ。前のオペランドが後ろのオペランドより大きいなら、1 を返し、それ以外なら0 を返します。
※この結果は1 です。
|
>= |
関係演算子の一つ。前のオペランドが後ろのオペランド以上なら、1 を返し、それ以外なら0 を返します。
※この結果は1 です。
|
== |
等値演算子の一つ。前後2つのオペランドが等しいときは1 を、そうでなければ0 を返します。
※この結果は0 です。
|
!= |
等値演算子の一つ。前後2つのオペランドが等しくなければ1 を、等しければ0 を返します。
※この結果は1 です。
|
&& |
論理AND演算子。論理演算子の一つ。前後のオペランドが 0 以外の値のとき、1 を返します。どちらかのオペランドが 0 のときは、0 を返します。なお前のオペランドが 0 のときは、後ろのオペランドを評価しません。
※この結果は1 です。
|
|| |
論理OR演算子。論理演算子の一つ。前後のオペランドが 0 のとき、0 を返します。どちらかのオペランドが 0 以外のときは、1 を返します。前のオペランドが 0 以外のときは、後ろのオペランドを評価しません。
※この結果は1 です。
|
[: :] |
難解度「AA+」 |
ポインタ変換演算子。括ったオペランドをポインタと見なし、そのアドレスにある4バイトの数値を返します。
※この結果は、アドレス0x400000 にある4バイトの数値です。
なお、所得を4バイト未満にしたい場合は、閉じ括りにバイト数を挟むことで可能になります。
_ [: 0x400000 :3]
_ [: 0x400000 :2]
_ [: 0x400000 :1]
|
|
|
[_ _] |
アドレス補正演算子。括ったオペランドに、[adjustment]によるアドレス補正をかけた値を返します。
※この結果は、0x400000 にアドレス補正をかけた数値です。アドレス補正属性がないなら、0x400000 がそのまま使われます。
|
[. .] |
オフセット演算子。括ったオペランドに、[replace]によるオフセット値を加算した値を返します。
※この結果は、0x400000 に[replace]のオフセット値を加算した数値です。オフセット値がないなら、0x400000 がそのまま使われます。
|
[~ ~] |
エンディアン反転演算子。括ったオペランドに、4バイト単位でエンディアン反転を行った値を返します。
※この結果は、0x55AA00FF です。
なお、反転するバイト範囲を4バイト未満にしたい場合は、閉じ括りにバイト数を挟むことで可能になります。
_ [~ 0x400000 ~3]
_ [~ 0x4000 ~2]
|
※バイト単位での反転なので、1バイト用はありません。
|
MName:: |
モジュールアドレス演算子。次に続く文字オペランドをモジュール名に持つモジュールの、開始アドレスを返します。
※この結果は、対象プロセスにおけるモジュール「GDI32.dll」の開始アドレスです。
なお、オペランドの連続は許されていないので、「MName::GDI32.dll 0x400」といった書き方はあり得ませんが、読みにくいようなら、()による表記で対応しても良いでしょう。
_ (MName::GDI32.dll) + 0x400
_ 200 - (MName::KERNEL32.dll) + 0x20
|
※モジュール名は、大文字小文字を区別しません。
|
HNumber:: |
ヒープアドレス演算子。次に続く数値オペランド番目のヒープの、開始アドレスを返します。
※この結果は、対象プロセスにおける1番目のヒープ(Heap1)の開始アドレスです。
※ヒープ番号は、1から始まります。
|
$変数名 |
擬似変数。演算子ではなくオペランドの一種です。次に説明する変数代入と組み合わせて使います。「変数名」の指す変数の値を返します。
※変数「tmp」が一度も代入されていないため、$tmpは0として扱われ、この結果は2になります。
|
=> 変数名 |
変数代入演算子。「=>」に続く変数名の変数を定義し、前のオペランドの値を代入します。ただし、$Valは予約語変数のため、ここでは使用できません。
_ 0x400 => tmp; $tmp+0x10;
|
※この結果は、0x410 です。
なお、例中の「;」については、次節「アドレスコーディングの分割」を参照してください。
|
各演算子の優先順位は、高い順に並べると