1

在程序上使用 strace:strace 在 Debian 和 CentOS 中输出相同的提取输出,但 set_thread_area 除外。(该程序的版本在两个 Linux 上完全相同。)

为什么它们不同?有什么方法可以使两个 Linux 上的输出相同?这种差异可以用 C 编程吗?Debian/CentOS 中是否缺少某些软件包?

set_thread_area({entry_number:-1 -> 6, base_addr:0xb7fb16c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
打开(“/dev/urandom”,O_RDONLY)= 3
读(3, "\242\177)", 3) = 3
set_thread_area(0xff9db33c) = 0

编辑
第一:CentOS i686
第二:Debian x64,但用 -m32 编译

4

1 回答 1

1

您是否在询问地址不同的原因,或者为什么strace输出格式不同?如果是后者,我怀疑您只是在处理 的两个不同版本strace,一个可能已过时。然而,这看起来也很奇怪:

set_thread_area(0xff9db33c)             = 0

该地址0xff9db33c绝对不是 i386 上的有效用户空间地址。您的系统之一是否可能是 x86_64?这也可以解释不同的格式,因为set_thread_area在 i386 上需要一个指向 a 的指针struct ldt_desc,而在 x86_64 上它只需要将实际指针值加载到线程寄存器中。

于 2011-04-29T14:57:33.640 回答