<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tim Jan</title>
    <description>The latest articles on DEV Community by Tim Jan (@call_me_sin).</description>
    <link>https://dev.to/call_me_sin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4048834%2Fb597f601-917e-4648-877c-ec7a010e8b09.png</url>
      <title>DEV Community: Tim Jan</title>
      <link>https://dev.to/call_me_sin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/call_me_sin"/>
    <language>en</language>
    <item>
      <title>Templates in C++</title>
      <dc:creator>Tim Jan</dc:creator>
      <pubDate>Tue, 04 Aug 2026 08:22:51 +0000</pubDate>
      <link>https://dev.to/call_me_sin/templates-in-c-51c7</link>
      <guid>https://dev.to/call_me_sin/templates-in-c-51c7</guid>
      <description>&lt;p&gt;template关键字用于,创建泛型类或函数&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fig1oifnjaw70l96fjr4i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fig1oifnjaw70l96fjr4i.png" alt=" " width="800" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;语法:&lt;code&gt;&lt;br&gt;
template &amp;lt;typename A, typename B, ...&amp;gt;&lt;br&gt;
entity_definition&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>vPtr和vTable的作用</title>
      <dc:creator>Tim Jan</dc:creator>
      <pubDate>Tue, 04 Aug 2026 07:55:19 +0000</pubDate>
      <link>https://dev.to/call_me_sin/vptrhe-vtablede-zuo-yong-5eij</link>
      <guid>https://dev.to/call_me_sin/vptrhe-vtablede-zuo-yong-5eij</guid>
      <description>&lt;p&gt;vPtr:每个有virtual function的父类的对象都会产生一个vPtr指向vTable&lt;br&gt;
vTable:包含每个虚拟函数的地址,用于访问其;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw56s7wh8z9rw6pub2y0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw56s7wh8z9rw6pub2y0k.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjyhmim0ofwrjoh1v90dv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjyhmim0ofwrjoh1v90dv.png" alt=" " width="737" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>逆向中printf和std::cout的区别</title>
      <dc:creator>Tim Jan</dc:creator>
      <pubDate>Tue, 04 Aug 2026 07:52:07 +0000</pubDate>
      <link>https://dev.to/call_me_sin/ni-xiang-zhong-printfhe-stdcoutde-qu-bie-4b16</link>
      <guid>https://dev.to/call_me_sin/ni-xiang-zhong-printfhe-stdcoutde-qu-bie-4b16</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"Hello World!"&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;std::cout是全局结构体对象（在内存中占有一块固定的空间）。逆向视角：它在内存里有一个固定的全局地址。当程序启动、还没进入 main 函数时，C++ 运行时库就已经在后台把它初始化好了。&lt;/li&gt;
&lt;li&gt;&amp;lt;&amp;lt;:在 C 语言或汇编里，&amp;lt;&amp;lt; 是位移操作（把二进制数往左移）。但在 C++ 里，它被重载（Overload）成了函数。即"&lt;strong&gt;调用&lt;/strong&gt;打印函数”
即在逆向视角：你在反汇编窗口里看不到任何“左移”的汇编指令（如 shl），你只会看到两个紧挨着的 call 指令。第一个 call 负责打印字符串，第二个 call 负责处理 endl。&lt;/li&gt;
&lt;li&gt;"Hello World":逆向视角：它被硬编码在二进制文件的 .rdata（只读数据段）中。当程序执行到这里时，会把这个字符串在内存中的首地址（指针）作为参数，传递给第一个 &amp;lt;&amp;lt; 函数&lt;/li&gt;
&lt;li&gt;std::endl —— 它是个“双重间谍”（换行 + 强制刷新）:刷新缓存区（Flush）：强迫操作系统立刻把缓存区里的字打印到屏幕上，而不是等缓存区满了再打印。
逆向视角：std::endl 本质上是一个函数指针。当它作为参数传给 &amp;lt;&amp;lt; 时，底层会调用一个负责刷新缓存的函数（类似于 C 语言中的 fflush(stdout)）。这就是为什么 std::cout 有时候比 printf 慢的原因之一——频繁的强行刷新缓存会消耗更多的 CPU 性能。&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Memory Layout</title>
      <dc:creator>Tim Jan</dc:creator>
      <pubDate>Wed, 29 Jul 2026 07:38:30 +0000</pubDate>
      <link>https://dev.to/call_me_sin/memory-layout-2jp9</link>
      <guid>https://dev.to/call_me_sin/memory-layout-2jp9</guid>
      <description>&lt;h1&gt;
  
  
  memory segments内存段
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwpjgo82l2nd5rvfq0m12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwpjgo82l2nd5rvfq0m12.png" alt=" " width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  memory sections概览
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcywfpibz7vg4afy2d3ct.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcywfpibz7vg4afy2d3ct.png" alt=" " width="337" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;栈:'FIFO',用户输入数据应该放在heap中,除非指定长度,但内存地址会放在stack中,栈指针和base pointer用于记录栈的顶部位子和底部位置,不存放静态数据,底部从高往低.栈存放局部变量,参数和返回值(调用函数时),BP和SP,通过SP偏移来访问栈帧数据;栈帧:指的是栈中分配的内存;RDI存参数;若调用下一方法:rbp=上一rsp;&lt;/li&gt;
&lt;li&gt;堆:底部从低往高,存放无法定长度的数据,存放structures和用户输入&lt;/li&gt;
&lt;li&gt;Program Image - This is the program/executable loaded into memory. On Windows, this is typically a Portable Executable (PE).&lt;/li&gt;
&lt;li&gt;TEB:存放当前运行线程的星系
PEB:存放process and the loaded modules的信息和是否'BeingDebugged'&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbii6wyyctruo3gp8uv0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbii6wyyctruo3gp8uv0f.png" alt=" " width="338" height="267"&gt;&lt;/a&gt;&lt;br&gt;
图中StackVar1先创建同理heapVar1也先创建&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack Frames
&lt;/h2&gt;

&lt;p&gt;存储方法的数据块&lt;br&gt;
{embed &lt;a href="https://tryhackme.com/room/win64assembly?vccr=1" rel="noopener noreferrer"&gt;https://tryhackme.com/room/win64assembly?vccr=1&lt;/a&gt;}&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Storage
&lt;/h2&gt;

&lt;p&gt;与如何分配内存不同&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwo09h0sgtlpg70y823eq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwo09h0sgtlpg70y823eq.png" alt=" " width="800" height="312"&gt;&lt;/a&gt;&lt;br&gt;
栈：地址向下增长 → 数组越界向下覆盖下方相邻局部变量&lt;br&gt;
堆：地址向上增长 → 数组越界向上覆盖上方相邻堆变量&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Windows x64 Calling Convention</title>
      <dc:creator>Tim Jan</dc:creator>
      <pubDate>Tue, 28 Jul 2026 07:58:01 +0000</pubDate>
      <link>https://dev.to/call_me_sin/windows-x64-calling-convention-4mne</link>
      <guid>https://dev.to/call_me_sin/windows-x64-calling-convention-4mne</guid>
      <description>&lt;p&gt;calling conventions定义&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;参数如何被传入&lt;/li&gt;
&lt;li&gt;谁给变量分配空间&lt;/li&gt;
&lt;li&gt;谁清除栈
&lt;strong&gt;Callee refers to the function being called, and the caller is the function making the call.&lt;/strong&gt;
## fastcall
Application Binary Interface(ABI):定义calling convention,parameter handling规则
具体的x64windows调用约定:&lt;/li&gt;
&lt;li&gt;从左到右的前四个参数被传入registry:为非浮点时:RCX,RDX,R8,R9;浮点时:XMM0, XMM1, XMM2, and XMM3
2.如果上面的是是浮点和整型的混合,则填入对应位子的registry即如果第二个为整型则第二个寄存器为RDX
3.如果参数太大则传入reference(即内存地址指针)
4.参数可以放入任何对应(整型或浮点型)的可以放下的寄存器
5.如果无法放入寄存器,则传入栈(超过四个参数)
注意:无论是否使用到栈,栈中都会预留四个参数的空间
课外的调用约定:&lt;/li&gt;
&lt;li&gt;Member functions have an implicit first parameter for the "this" pointer. Because it's a pointer and it's the first parameter, it will be passed via RCX. This can be very useful to know.&lt;/li&gt;
&lt;li&gt;RBP在调用方法时要保存(push),调用后要恢复pop&lt;/li&gt;
&lt;li&gt;方法的返回值通过RAX(integer, bool, char, etc., )或XMM0(浮点)传递&lt;/li&gt;
&lt;li&gt;调用函数需要为被调用函数参数预留参数空间,即使没有参数,也至少要预留4个参数空间&lt;/li&gt;
&lt;li&gt;易失寄存器(volatile RAX, RCX, RDX, R8, R9, R10, R11, and XMM0-XMM5 ):函数调用时，被调函数可以随意覆盖、修改这些寄存器
和
非易失寄存器(nonvolatile RBX, RBP, RDI, RSI, RSP, R12, R13, R14, R15, and XMM6-XMM15):在调用前入栈保存,调用后恢复&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Stack Access
&lt;/h2&gt;

&lt;p&gt;请记住：前四个参数尽管通过寄存器传递，但栈上依然会为它们预留空间。这块空间大小为 32 字节（0x20），4 个寄存器各自占用 8 字节。&lt;br&gt;
如果超过四个参数入栈,RSP+0x20 处存放第五个参数，RSP+0x28 处存放第六个参数。&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>computerscience</category>
      <category>programming</category>
    </item>
    <item>
      <title>Flags</title>
      <dc:creator>Tim Jan</dc:creator>
      <pubDate>Tue, 28 Jul 2026 06:55:06 +0000</pubDate>
      <link>https://dev.to/call_me_sin/flags-1ma4</link>
      <guid>https://dev.to/call_me_sin/flags-1ma4</guid>
      <description>&lt;p&gt;Flags被保存在EFLAGS或RFLAGS(x64)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk8qlnis5eny42ffgs6et.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk8qlnis5eny42ffgs6et.png" alt=" " width="798" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;此外可找些案例自己学习&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Assembly-instruction</title>
      <dc:creator>Tim Jan</dc:creator>
      <pubDate>Mon, 27 Jul 2026 07:52:50 +0000</pubDate>
      <link>https://dev.to/call_me_sin/assembly-instruction-1j2c</link>
      <guid>https://dev.to/call_me_sin/assembly-instruction-1j2c</guid>
      <description>&lt;p&gt;语法:操作码/指令/助记符 目标操作数(operand),源操作数&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;立即数(IM):不是寄存器或内存地址,硬编码常量数据;如5,10等&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;registry:寄存器,存储指针或数据(cpu内)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqtiomyaja0oae9cxw20y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqtiomyaja0oae9cxw20y.png" alt=" " width="800" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjckvfrc59kju0ntk4le0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjckvfrc59kju0ntk4le0.png" alt=" " width="799" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;内存地址:如0x7FFF842B.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;常用指令:&lt;br&gt;
mov,&lt;br&gt;
LEA is short for Load Effective Address&lt;br&gt;
push&lt;br&gt;
POP&lt;br&gt;
INC&lt;br&gt;
DEC&lt;br&gt;
ADD:add RAX, RBX &lt;br&gt;
SUB:sub RAX, RBX&lt;br&gt;
乘除: 上半部分存在RDX,下半部分在RAX;RDX:RAX;mul(无符号),imul(有符号);div,idiv&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;流程控制: RET is short for return,

&lt;code&gt;mov RAX, 10 ret ;等价于return 10&lt;/code&gt;

;CMP(compare),JCC instructions(conditional jumps,基于flags):有JNE, JLE, JNZ...(对应高级语言中的IF);NOP 
如

&lt;code&gt;
mov RAX, 25
mov RBX, 5
mul RBX ; Multiplies RAX (25) with RBX (5)
&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;code&gt;mov RAX, 18&lt;br&gt;
mov RBX, 3&lt;br&gt;
div RBX ; Divides RAX (18) by RBX (3)&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;区别:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;✅ mov rax, [struct+8]
先计算地址 struct起始地址 + 8，再读取该内存地址里存储的值送入 rax。&lt;/li&gt;
&lt;li&gt;✅ lea rax, [struct+8]
lea 不会解引用！只单纯计算有效地址。&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  pointers
&lt;/h2&gt;

&lt;p&gt;关键符号&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;[]:解引用即如[var],访问指针var在内存中保存的值&lt;/li&gt;
&lt;li&gt;LEA :[]在其中不解引用
例子
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ed8a12yzck4ccwri6lk.png" alt=" " width="800" height="144"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh6r9mjzqxpy48n19e9lm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh6r9mjzqxpy48n19e9lm.png" alt=" " width="800" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  zero extension零扩展
&lt;/h2&gt;

&lt;p&gt;-&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;mov eax, 0x1234&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
CPU自动将高32位归零,最终完整 64 位 RAX = 0x000000001234;但写入16位/8位子寄存器不会自动零扩展&lt;/p&gt;

&lt;h2&gt;
  
  
  JMP's Mason（跳转临界边界问题）
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frvctfx4b8p4chj6f7mg2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frvctfx4b8p4chj6f7mg2.png" alt=" " width="800" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;rax = struct起始地址 + 8，得到偏移 8 字节的成员地址，不取内存数据。&lt;/p&gt;

</description>
      <category>assembly</category>
    </item>
  </channel>
</rss>
