【发布时间】:2014-03-16 14:20:30
【问题描述】:
出于某种原因,我用 C 语言编写了一个简单的程序来输出给定输入的二进制表示:
int main()
{
char c;
while(read(0,&c,1) > 0)
{
unsigned char cmp = 128;
while(cmp)
{
if(c & cmp)
write(1,"1",1);
else
write(1,"0",1);
cmp >>= 1;
}
}
return 0;
}
编译后:
$ gcc bindump.c -o bindump
我做了简单的测试来检查程序是否能够打印二进制:
$ cat bindump | ./bindump | fold -b100 | nl
输出如下:http://pastebin.com/u7SasKDJ
我怀疑输出看起来像随机的 1 和 0 序列。然而,部分输出似乎更有趣。例如,看看第 171 行和第 357 行之间的输出。我想知道 为什么与可执行文件的其他部分相比有很多零?
我的架构是:
$ lscpu
Architecture: i686
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 28
Stepping: 10
CPU MHz: 1000.000
BogoMIPS: 3325.21
Virtualization: VT-x
L1d cache: 24K
L1i cache: 32K
L2 cache: 512K
【问题讨论】: