私は2つのシステムを持っています:
- 3.13.0-35-generic ... x86_64 x86_64 x86_64 gcc を使用する GNU/Linux: 4.8.2
- 2.6.32-21-generic #32-Ubuntu ... gcc を使用する i686 GNU/Linux: 4.4.3
両方のシステムで次のコードをコンパイルしました。
int numOfNops = 600;
unsigned char nops[numOfNops];
int i;
for (i=0; i < numOfNops; i++) {
nops[i] = '\x90';
}
...
printf("GET /%s%s\x90\x90%s HTTP/1.0 \n", nops, buf, ESPs);
問題は、「nops」配列の印刷です。
- 64 ビット システム #1 で実行すると、出力は希望どおりに表示されます。
- 32 ビット システム #2 で実行すると、printf() 出力の NOP 部分に追加の奇妙な文字が含まれます。
Hexdump システム #1
00000250 90 90 90 90 90 90 90 90 90 90 90 90 90 89 e3 da |................|
00000260 c4 d9 73 f4 5f 57 59 49 49 49 49 49 49 49 49 49 |..s._WYIIIIIIIII|
Hexdump システム #2:
00000250 90 90 90 90 90 90 90 90 90 90 90 90 90 24 c5 12 |.............$..|
00000260 89 e3 da c4 d9 73 f4 5f 57 59 49 49 49 49 49 49 |.....s._WYIIIIII|
したがって、追加の文字は 0x24 0xc5 0x12 です。
[Q] それはなぜですか?
ありがとう。