我有2個系統:printf的時候在x86_64和i686的編制有所不同
- 3.13.0-35泛型... x86_64的x86_64的x86_64的GNU/Linux的用gcc:4.8.2
- 2.6.32-21-通用#32 Ubuntu的... i686的GNU/Linux的用gcc: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部分()輸出包含附加怪異字符,即:
進制打印系統#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|
進制打印系統#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。
[問]爲什麼呢?
謝謝。
爲什麼...你這樣做? – 2014-09-20 18:02:36
只是一項任務。 :) – no6 2014-09-20 18:06:42
什麼是「NOP字符」? HTTP 1.0中的URI必須是ASCII,而0x90不是有效的ASCII字符。 – Wyzard 2014-09-20 18:35:29