Intel sse instruction -- pxor

文章讨论了在逆向工程中遇到的SSE指令,它是GCC优化生成的。作者通过示例展示了如何在没有源码的情况下处理这类指令,并使用GDB进行调试,揭示了`pxor`指令的作用是清零xmm2寄存器。
摘要由CSDN通过智能技术生成

     逆向时碰到一段指令,出现了sse指令,是gcc优化成sse指令的结果。编译程序时,可以使用 -mno-sse 选项禁止使用sse编译优化。因没有源码,碰到sse指令,试试看了。几个指令在一起,分开来分析。

    33a9:	48 8b 84 24 a8 00 00 	mov    0xa8(%rsp),%rax  // rdx=var_0xa8=81
    33b0:	00 
    33b1:	bf 02 00 00 00       	mov    $0x2,%edi        // edi=2
    33b6:	48 89 44 24 08       	mov    %rax,0x8(%rsp)   // (rsp)=var_0xa8=81
    33bb:	e8 30 f3 ff ff       	callq  26f0 <sysconf@plt>
            int sysconf_ret = 0;
            sysconf_ret = sysconf(2);

    33c0:	66 0f ef d2          	pxor   %xmm2,%xmm2      // xmm2=0
    33c4:	f2 48 0f 2a d0       	cvtsi2sd %rax,%xmm2     // xmm2=100.0,有符号整数变成1个双精度浮点数,结果送入目的寄存器的低64位,高64位不变. v2_double = {100, 0}
    33c9:	66 0f 2f 15 9f 38 00 	comisd 0x389f(%rip),%xmm2        # 6c70 <_IO_stdin_used@@Base+0xc70>
    33d0:	00 
    33d1:	f2 0f 11 54 24 48    	movsd  %xmm2,0x48(%rsp) 
    33d7:	0f 86 d5 06 00 00    	jbe    3ab2 <__sprintf_chk@plt+0x1342>  // not jump

33c0:    66 0f ef d2              pxor   %xmm2,%xmm2

pxor 指令:

        Logical Exclusive OR。

        源存储器128个二进制位'异或'目的寄存器128个二进制位,结果送入目的寄存器,内存变量必须对齐内存16字节。

gdb 调测:

(gdb) p/x $xmm2
$5 = {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0},
  uint128 = 0x0}

结论:

        pxor 把 xmm2 清零了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值