2011-04-30 72 views
2

我运行CentOS的都和Debian的程序。输出是完全一样的,但在Centos中,我在Debian中获得3行粗体,而我没有。那3条线是什么,我怎样才能让他们进入Debian呢?strace的输出问题

 
execve("./z1", ["./z1"], [/* 31 vars */]) = 0 
brk(0)         = 0x8458000 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f41000 
access("/etc/ld.so.preload", R_OK)  = -1 ENOENT (No such file or directory) 
open("/home/myuser/public_html/libs/libmudflap.so.0", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0PJ\0\0004\0\0\0"..., 512) = 512 
fstat64(3, {st_mode=S_IFREG|0755, st_size=105432, ...}) = 0 
mmap2(NULL, 943136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xd89000 
mmap2(0xda2000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19) = 0xda2000 
mmap2(0xda3000, 836640, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xda3000 
close(3)        = 0 
open("/home/myuser/public_html/libs/libc.so.6", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320m\1\0004\0\0\0"..., 512) = 512 
fstat64(3, {st_mode=S_IFREG|0755, st_size=1327556, ...}) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f40000 
mmap2(NULL, 1337704, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x891000 
mprotect(0x9d1000, 4096, PROT_NONE)  = 0 
mmap2(0x9d2000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x140) = 0x9d2000 
mmap2(0x9d5000, 10600, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x9d5000 
close(3)        = 0 
open("/home/myuser/public_html/libs/libdl.so.2", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\[email protected]\n\0\0004\0\0\0"..., 512) = 512 
fstat64(3, {st_mode=S_IFREG|0755, st_size=9736, ...}) = 0 
mmap2(NULL, 12408, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x74e000 
mmap2(0x750000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0x750000 
close(3)        = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f3f000 
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f3f6c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 
open("/dev/urandom", O_RDONLY)   = 3 
read(3, "\f\233\37", 3)     = 3 
close(3)        = 0 
mprotect(0x750000, 4096, PROT_READ)  = 0 
+0

为什么你想,让他们在Debian中,如果你不知道他们做了什么?你试图解决的实际问题是什么? – viraptor 2011-04-30 21:10:21

+0

你总是可以挂钩gdb,在'open'上设置一个断点,为filenam'/ dev/urandom'添加条件并运行...你将会看到究竟是什么调用它 – sehe 2011-04-30 21:14:19

回答

4

我不认为它与strace有什么关系。我并不确定,但它可能与事情如何安排在记忆中有关。我知道有些系统将二进制文件的一部分放在随机存储器中,以防止恶意软件活动。这被称为Address Space Layout Randomization(ASLR)。我猜测那时CentOS正在使用这个,Debian不是。请参阅this post关于在CentOS中禁用ASLR。试试看看strace是否仍然显示/ dev/urandom被打开。

所以问题是,它可能是你的系统,而不是与strace或者是造成差异的程序。

- 编辑 -

所以我可能是错误的上面。我已经对这个问题进行了大量的研究,并设法缩小了它的范围。我发现的是,这很可能是一个图书馆发出这些电话。我使用的方法有点涉及,但可行。 See this post关于如何完成,如果你仍然好奇。

我没有使用GNOME(EOG)的眼睛这个调试,因为简单的测试程序,我写的没有触发urandom设备的读取。事实证明,Gkt +是我的案例中的罪魁祸首,它使用随机数字为某些对象创建唯一的ID。我很想知道你正在使用的程序是如何进行这些调用的。此时我怀疑这是ASLR。

+0

一个看似不清楚的非常好的答案问题1 :) – 2012-03-28 07:04:52