自制反汇编工具使用实例 其二(使用xmm寄存器初始化对象,以及空的成员函数指针)...
在反匯編代碼中,當(dāng)看到xmm寄存器,第一反應(yīng)是將要進(jìn)行浮點操作或訪問,但是更加多的情況是在使用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 }首先對函數(shù)原型進(jìn)行分析,對下面翻譯代碼對rdx的訪問使用分析,可以知道作為dl訪問,通常是作為布爾類型使用,從而得到setAllowsEdgeAntialiasing的參數(shù)類型應(yīng)該是布爾類型。
?
在翻譯代碼唯一的一處函數(shù)調(diào)用,CA::Layer::set_bit的調(diào)用中,最后一個參數(shù)是一個成員函數(shù)指針,這個成員函數(shù)指針不是一個指針而是一個結(jié)構(gòu)體(請參看前面《函數(shù)指針和成員函數(shù)指針有什么不同,反匯編帶看清成員函數(shù)指針的本尊(gcc@x64平臺)》,不能直接使用寄存器傳遞,這里應(yīng)該使用棧來傳遞。也就是xmm0寄存器用來初始化了一個成員函數(shù)指針,并且初始化了一個為空的成員函數(shù)指針(結(jié)構(gòu)體)。也就是上面在set_bit函數(shù)中傳遞了一個為空的成員函數(shù)指針(請區(qū)分好普通指針)。根據(jù)參考前面的方面,可知成員函數(shù)指針結(jié)構(gòu)體有兩個成員變量,在x64體系中,正是16字節(jié)(128位)大小,用一條媒體指令就可以將xmm0寄存128位賦值0,并且然后只要一條寫內(nèi)存指令,方便cpu進(jìn)行超示量。
?
翻譯的最后結(jié)果是:
// -[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); }
?
轉(zhuǎn)載于:https://www.cnblogs.com/bbqzsl/p/6398934.html
總結(jié)
以上是生活随笔為你收集整理的自制反汇编工具使用实例 其二(使用xmm寄存器初始化对象,以及空的成员函数指针)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二月,适合一个人去的旅行地
- 下一篇: 卓有成效的团队建设经验与见解 Team