我有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