自制反汇编工具使用实例 其二(使用xmm寄存器初始化对象,以及空的成员函数指针)...
在反汇编代码中,当看到xmm寄存器,第一反应是将要进行浮点操作或访问,但是更加多的情况是在使用xmm寄存器初始化局部对象。
下面是自制反汇编工具翻译出来的代码:
// -[CALayer setAllowsEdgeAntialiasing:] void CALayer20_setAllowsEdgeAntialiasing3A_(id self, SEL sel, uintptr_t setAllowsEdgeAntialiasing) {// 0 pushq %rbp// 1 rbp = rsp;// 4 rsp = rsp - 0x20;// 8 rax = CALayer._attr;// 15 rdi = rax->_rdi._8;// 20 xmm0 = 0.; ;// 23 ((float*)&_10)[0] = xmm0.ps[0]; ((float*)&_10)[1] = xmm0.ps[1]; ((float*)&_10)[2] = xmm0.ps[2]; ((float*)&_10)[3] = xmm0.ps[3]; ;// 27 rax = _10;// 31 rcx = _8;// 35 rsp->_8 = rcx;// 40 rsp->_0 = rax;// 44 r8d = (uint32_t)(uint8_t&)dl;// 48 esi = 0xb;// 53 edx = 0x1d;// 58 ecx = 0x67;// 63 call((CA::Layer*)rax->_rdi._8)->set_bit((unsigned int)0xb, (unsigned int)0x1d, (unsigned int)0x67, (bool)dl, (void (CA::Layer::*)(CA::Transaction*))r9);// 68 rsp = rsp + 0x20;// 72 popq %rbp/****** global variables**/// 8 extern ent_off__0x648d0; movq 0x648c1(%rip), %rax; CALayer._attr }
首先对函数原型进行分析,对下面翻译代码对rdx的访问使用分析,可以知道作为dl访问,通常是作为布尔类型使用,从而得到setAllowsEdgeAntialiasing的参数类型应该是布尔类型。
在翻译代码唯一的一处函数调用,CA::Layer::set_bit的调用中,最后一个参数是一个成员函数指针,这个成员函数指针不是一个指针而是一个结构体(请参看前面《函数指针和成员函数指针有什么不同,反汇编带看清成员函数指针的本尊(gcc@x64平台)》,不能直接使用寄存器传递,这里应该使用栈来传递。也就是xmm0寄存器用来初始化了一个成员函数指针,并且初始化了一个为空的成员函数指针(结构体)。也就是上面在set_bit函数中传递了一个为空的成员函数指针(请区分好普通指针)。根据参考前面的方面,可知成员函数指针结构体有两个成员变量,在x64体系中,正是16字节(128位)大小,用一条媒体指令就可以将xmm0寄存128位赋值0,并且然后只要一条写内存指令,方便cpu进行超示量。
翻译的最后结果是:
// -[CALayer setAllowsEdgeAntialiasing:(bool)] void CALayer20_setAllowsEdgeAntialiasing3A_(id self, SEL sel, uintptr_t allowsEdgeAntialiasing) {// 63 call((CA::Layer*)self->_attr._8)->set_bit((unsigned int)0xb, (unsigned int)0x1d, (unsigned int)0x67, (bool)allowsEdgeAntialiasing, (void (CA::Layer::*)(CA::Transaction*))0); }
转载于:https://www.cnblogs.com/bbqzsl/p/6398934.html
自制反汇编工具使用实例 其二(使用xmm寄存器初始化对象,以及空的成员函数指针)...相关推荐
- [Reprint]C++普通函数指针与成员函数指针实例解析
这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下 C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般函数 ...
- 指针--用指针变量作函数参数的实例(按值调用与模拟按引用调用)、函数指针及其应用
一.用指针变量作函数参数的实例 思考题: 例题:从键盘输入某班学生某门课成绩(每班人数最多不超过40人,具体人数由键盘输入),是分析下列程序是否能实现计算并输出最高分以及相应学号. #include ...
- 学习ARM反汇编工具objdump和一个简单实例
学习ARM反汇编工具objdump和一个简单实例 --参考朱有鹏ARM裸机编程 1.反汇编的原理&为什么需要反汇编 arm-linux-objdump -D led.elf > led_ ...
- 自制反汇编逆向分析工具 迭代第六版本 (一)
这个版本主要在逆向代码输出上做功夫.首先就是对反汇编代码指令的直译,寻址访问则适配成结构体成员访问或数组访问的方式,使更加直观,效果图如下: 另一图: 接着就是有关SSE指令的直译: 直译中并没有对检 ...
- 程序员的吸星大法-IDA反汇编工具初探
看过<<笑傲江湖>>的朋友一定知道吸星大法吧,这是一种可以吸取他人内功来使自己功力增长的神功,(段誉的北冥神功也是这样, 扯远了...).对于程序员来说,增长自己编程功力的一个 ...
- (转)逆向与反汇编工具
第 1 章 逆向与反汇编工具 了解反汇编的一些背景知识后,再深入学习IDA Pro之前,介绍其他一些用于二进制文件的逆向工程工具,会对我们学习有所帮助.这些工具大多在IDA之前发布 ...
- Java反汇编工具hsdis-jitwatch使用
原文链接 hsdis && jitwatch hsdis是java反汇编工具,可查看java汇编实现 jitwatch不仅能够看到汇编实现,并且有UI界面版本可以切换汇编语言.查看字节 ...
- c语言反汇编工具,PVDasm 反汇编工具
Proview (a.k.a PVDasm) Disassembler, 唯冠 (又名 PVDasm) 反汇编器,PVDasm 是自由. 互动. 适用于多种 CPU (英特尔 80 x 86 / Ch ...
- Linux 反汇编工具,逆向与反汇编工具
逆向与反汇编工具 了解反汇编的一些背景知识后,再深入学习IDA Pro之前,介绍其他一些用于二进制文件的逆向工程工具,会对我们学习有所帮助.这些工具大多在IDA之前发布,并且仍然可用于快速分析二进制文 ...
最新文章
- 2008年上半年程序员考试试题分析
- Python入门100题 | 第021题
- linux cer证书转为jks,常见SSL证书格式介绍以及SSL证书格式转化方法
- 小车自动往返工作原理_自动气象站的工作原理介绍
- libxml -- 解析 XML 文档
- ul、li列表简单实用代码实例
- 20165322 第二周结队编程-四则运算
- 【python】python的环境搭建
- 佳博LabelShop模板文件转成佳博打印机指令软件
- 社区论坛小程序源码,功能齐全,简洁漂亮,前端+后端
- 基于OpenSSL,实现C语言SM2的PKCS10的证书请求
- 《水浒传》108将的绰号(ZZ)
- java将英文字符(无论大小写)转化为小写
- jpg转换为eps_在线JPG到EPS转换器
- 老域名如何选择才能帮助优化?
- 002.西门子M440变频器端子控制正反转
- 关于C++传递数组时初始化注意事项(允悲)
- 26岁转行软件测试,目前34了,分享一些我的经历和感受
- 职称评审电子信息工程计算机技术总结,电子信息工程专业工程师中级职称申报.docx...
- 2023年【危险化学品经营单位安全管理人员】最新解析及危险化学品经营单位安全管理人员考试技巧