<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Profile on DefeatMan的博客</title>
    <link>https://defeatman.github.io/tags/profile/</link>
    <description>Recent content in Profile on DefeatMan的博客</description>
    <image>
      <title>DefeatMan的博客</title>
      <url>https://defeatman.github.io/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://defeatman.github.io/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 02 Sep 2025 12:00:00 +0800</lastBuildDate>
    <atom:link href="https://defeatman.github.io/tags/profile/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>REPT：反向调试在已部署软件中缺陷的应用</title>
      <link>https://defeatman.github.io/posts/profile/rept/</link>
      <pubDate>Tue, 02 Sep 2025 12:00:00 +0800</pubDate>
      <guid>https://defeatman.github.io/posts/profile/rept/</guid>
      <description>&lt;p&gt;标题：REPT: Reverse Debugging of Failures in Deployed Software&lt;/p&gt;
&lt;p&gt;作者：Weidong Cui, Xinyang Ge, Baris Kasikci, Ben Niu, Upamanyu Sharma, Ruoyu Wang, Insu Yun&lt;/p&gt;
&lt;p&gt;发表会议：USENIX OSDI 2018&lt;/p&gt;
&lt;p&gt;原文链接：&lt;a href=&#34;https://www.usenix.org/system/files/osdi18-cui.pdf&#34;&gt;REPT Reverse Debugging of Failures in Deployed Software&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;intro&#34;&gt;Intro&lt;/h1&gt;
&lt;p&gt;众所周知，执行日志有助于调试，但当大多数日志或跟踪在正常运行时都会被丢弃时，没有人愿意为始终在线的日志记录/跟踪支付高性能开销。&lt;/p&gt;
&lt;p&gt;因此，在部署的软件出现故障时，仅靠 memory dump，以实现事后诊断。而开发人员调试memory dump具有挑战性，有很大一部分错误未得到修复&lt;/p&gt;
&lt;p&gt;论文针对已部署软件中难以复现的故障诊断难题，提出了REPT系统，这是一种用于对已部署系统中的软件故障进行反向调试的实用解决方案。&lt;/p&gt;
&lt;p&gt;REPT背后有两个关键思想&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;利用硬件跟踪以较低的性能开销记录程序的控制流 (Intel Processor Trace)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用一种新颖的二进制分析技术，根据记录的控制流信息和存储在内存转储中的数据值来恢复数据流信息 (Offline Binary Analysis Component Loadable Library in WinDbg)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;因此，REPT通过结合记录的控制流和恢复的数据流来实现反向调试&lt;/p&gt;
&lt;h1 id=&#34;intel-pt&#34;&gt;Intel PT&lt;/h1&gt;
&lt;p&gt;由CPU内部集成的专用硬件实现。当程序运行时，PT硬件以压缩的格式生成一系列Packet，记录关键的控制流变化（分支跳转、函数调用等）&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;instructions&lt;/th&gt;
          &lt;th&gt;PT&lt;/th&gt;
          &lt;th&gt;Decoded (timestamp, instruction)&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;mov&lt;/td&gt;
          &lt;td&gt;NT&lt;/td&gt;
          &lt;td&gt;00.000000, mov&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;jnz&lt;/td&gt;
          &lt;td&gt;TIME 2ns + T&lt;/td&gt;
          &lt;td&gt;00.000000, jnz&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;add&lt;/td&gt;
          &lt;td&gt;0x407e1d8&lt;/td&gt;
          &lt;td&gt;00.000002, add&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;cmp&lt;/td&gt;
          &lt;td&gt;TIME 100ns + NT&lt;/td&gt;
          &lt;td&gt;00.000002, cmp&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;je .label&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;00.000002, je .label&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;mov&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;00.000102, call (edx)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;.label:&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;00.000102, &amp;hellip;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;call (edx)&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;00.000102, test&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;test&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;00.000102, jb&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;jb&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Linux Perf 可以方便地收集和解码 Intel PT 跟踪数据&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
