- mov rbx,qword ptr [r13+150h]说明:
mov:传送指令MOV(Move)表示把一个字节、字或双字的操作数从源位置传送到目的位置,源操作数的内容不变
rbx:是一个可用的寄存器,存放的数据是合法的,不涉及系统隐私。
r13:寄存器R13常用作堆栈指针SP
[r13+150h]:是把r13和150h相加,把这个相加后的数值,转化为一个地址,
ptr:指针的缩写
qword:2个字节就是1个Word(1个字,16位),q就是英文quad-这个词根(意思是4)的首字母,所以它自然是word(2字节,0~2^16-1)的四倍,8字节
整句意是是:将这个地址里面的数据,以4个字(一个字是2字节,4字就是8字节)为单位,放进一个叫RBX的寄存器【是把内存地址为r13+150h处的数据赋给rbx】 - dec dword ptr [rcx+8]说明:
dec:减1指令
dword: 双字 就是四个字节
ptr:pointer缩写 即指针
[rcx+8]里的数据是一个地址值,这个地址指向一个双字型数据
意思是:指针指向的值,减一 - — F:\ac4.25-plus\Engine\Source\Runtime\Core\Public\Containers\Map.h ----------
455: if (auto* Pair = Pairs.Find(Key))
0000000045FFD552 lea rcx,[rdx+8]
0000000045FFD556 test rdx,rdx
0000000045FFD559 cmove rcx,rdx
(1) lea rcx,[rdx+8] 说明:
lea:是“load effective address”的缩写,简单的说,lea指令可以用来将一个内存地址直接赋给目的操作数
意思是:就是将rdx+8这个值直接赋给rcx,而不是把rdx+8处的内存地址里的数据赋给rcx。
(2) test rdx,rdx说明:
test:指令用于两个操作数的按位AND运算,并根据结果设置标志寄存器,结果本身不会写回到目的操作数,可以影响CF【进位标志】,OF【溢出标志】,PF【奇偶校验标志】,SF【符号标志】,ZF【零标志】标志位,两个操作数相等,同时为0时,AND 结果为0, 此时ZF置位【表示寄存器的值位1,复位:表示寄存器的值为0】
意思是:当rdx == 0时,执行cmove rcx,rdx
(3)cmove rcx,rdx 说明:
根据上表得:表示:ZF等于1时,将rcx的值赋给rdx - mov rdi,rax说明:
将rax寄存器的的数据传送到rdi寄存器,但是rax寄存器的数据本身不破坏 - .test与JE【jump When Equal】指令
test 指令用于两个操作数的按位AND运算,并根据结果设置标志寄存器,结果本身不会写回到目的操作数。
通俗点来说 .test非常普遍的用法是用来测试寄存器是否为空: 寄存器为空, 则ZF零标志为1,则跳转
JE 当ZF标志位为零,就跳转 - push rbp说明:
将rbx压入到堆栈中
《UE4游戏开发》之 《线上崩溃定位之常用汇编指令》
最新推荐文章于 2024-04-23 12:37:08 发布