type
status
date
slug
summary
tags
category
icon
password
Property
May 4, 2025 06:49 AM
这次依然是从汇编开始分析C语言里的一些语法实现,这次还是Windows平台上为主~
直接上最简单的:
 
movzx这个指令简单来说就是把小字节操作数移动到大字节寄存器,同时让大字节的高位补零。
 
为什么这么设计,我们从上面这个movzx这行代码说起,[z]是byte ptr类型,只占用8位也就是1字节。
eax是32位寄存器,能存放4字节,[z]放进eax只能占用低八位,高24位完全用不到,这里就需要用到高位补零了,就是因为怕高位还有字节没清零的情况,导致后续计算直接崩了。
 

 
接着看指针运算,这个其实早就学过了,这次只是温故一下,理解指针运算很重要的一点就是在C语言中,数据类型其实毫无意义,所有东西都可以当作内存来看,只是一个内存分配大小的问题。
 

 
函数指针,这个东西主要就看看在汇编中是怎么实现的。
 
notion image
运行完后发现as的HEX值为0x00054ae9,我这台机器数值在内存中为小端存储,也就是e9 4a 05的酱紫存放.
进入到call add进去看看,是不是内存值也是这:
notion image
恩,实际上就是这样.
 
累死了,不写了。
 
尝试写一个strlen看一眼Linux的匯編
Loading...