【问题标题】:set_thread_area in stracestrace 中的 set_thread_area
【发布时间】:2023-03-23 05:20:02
【问题描述】:

在程序上使用 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 编译

【问题讨论】:

  • 比较 strace 版本。
  • 并提供有关 2 个系统的更多详细信息,例如 cpu 类型..

标签: c linux binary strace


【解决方案1】:

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

set_thread_area(0xff9db33c)             = 0

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

【讨论】:

  • 我在询问输出格式。为什么 CentOS 有 urandom 而 Debian 没有?
  • 嗯,urandom 不是set_thread_area 的一部分。这是一个单独的事情。它出现在跟踪的哪个位置?我怀疑它正在为堆栈粉碎保护设置一个随机金丝雀。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2016-11-01
  • 2011-07-05
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多