《UE4游戏开发》之 《线上崩溃定位之常用汇编指令》

本文详细解析了汇编指令MOV、DEC和TEST的用法,包括它们在内存寻址、数值操作和条件判断中的作用。通过具体的指令实例,如movrbx,qwordptr[r13+150h]和decdwordptr[rcx+8],阐述了如何影响寄存器和内存中的数据。同时,介绍了LEA指令的用途,以及TEST指令如何影响标志寄存器并配合JE进行条件跳转。这些基础知识对于深入理解计算机底层运作至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 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】
  2. dec dword ptr [rcx+8]说明:
    dec:减1指令
    dword: 双字 就是四个字节
    ptr:pointer缩写 即指针
    [rcx+8]里的数据是一个地址值,这个地址指向一个双字型数据
    意思是:指针指向的值,减一
  3. — 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
  4. mov rdi,rax说明:
    将rax寄存器的的数据传送到rdi寄存器,但是rax寄存器的数据本身不破坏
  5. .test与JE【jump When Equal】指令
    test 指令用于两个操作数的按位AND运算,并根据结果设置标志寄存器,结果本身不会写回到目的操作数。
    通俗点来说 .test非常普遍的用法是用来测试寄存器是否为空: 寄存器为空, 则ZF零标志为1,则跳转
    JE 当ZF标志位为零,就跳转
  6. push rbp说明:
    将rbx压入到堆栈中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值