Macos CGPatternGetStep()签名?
有人能给我解释一下下面的装配吗Macos CGPatternGetStep()签名?,macos,assembly,core-graphics,reverse-engineering,disassembly,Macos,Assembly,Core Graphics,Reverse Engineering,Disassembly,有人能给我解释一下下面的装配吗 _CGPatternGetStep: +0 0007fb86 55 pushl %ebp +1 0007fb87 89e5 movl %esp,%ebp +3 0007fb89 53 pushl %ebx +4 0007fb8a 8b4508
_CGPatternGetStep:
+0 0007fb86 55 pushl %ebp
+1 0007fb87 89e5 movl %esp,%ebp
+3 0007fb89 53 pushl %ebx
+4 0007fb8a 8b4508 movl 0x08(%ebp),%eax
+7 0007fb8d 8b504c movl 0x4c(%eax),%edx
+10 0007fb90 8b5850 movl 0x50(%eax),%ebx
+13 0007fb93 89d0 movl %edx,%eax
+15 0007fb95 89da movl %ebx,%edx
+17 0007fb97 5b popl %ebx
+18 0007fb98 c9 leave
+19 0007fb99 c3 ret
我想找出CGPatternCreate方法中传递的步骤(
无效*信息,
CGRect边界,
CG仿射变换矩阵,
cgxstep,
CGYSTEP,
CG图案瓷砖瓷砖,
布尔是彩色的,
常量CGPatternCallbacks*回调
);
我想找到xStep和yStep值?我身上带着一张照片。上述函数的反汇编能否用于获取xStep和yStep
pushl %ebp
movl %esp,%ebp
pushl %ebx
设置堆栈帧并保存寄存器ebx
movl 0x08(%ebp),%eax
将第一个堆栈参数(从ebp+8)加载到eax中
movl 0x4c(%eax),%edx
从eax中地址的偏移量0x4C处的字段将32位值加载到edx中
movl 0x50(%eax),%ebx
从eax中地址的偏移量0x50处的字段将32位值加载到ebx中
movl %edx,%eax
movl %ebx,%edx
将先前加载的值分别移动到eax和edx中
popl %ebx
leave
ret
恢复保存的寄存器ebx,拆除堆栈帧并返回
由于代码在返回之前设置了eax和edx,因此我们可以得出结论,返回类型为64位。您还可以注意到,这两个负载用于连续位置(0x4C+4==0x50)。因此,第一个(也是唯一的)参数很可能是指向偏移量0x4C处有64位成员的结构的指针,函数返回其值
typedef struct _CGPattern
{
...
uint64_t step; // offset 0x4C
...
} CGPattern;
uint64_t CGPatternGetStep(CGPattern *pat)
{
return pat->step;
}
谢谢你的回复。我有点困惑。实际上,我正在尝试识别CGPatternRef CGPatternCreate的参数(void*info、CGRect界限、CGAffineTransform矩阵、CGFloat xStep、CGFloat yStep、CGPatternTilling平铺、bool isColored、const CGPatternCallbacks*回调);它有xStep和yStep。我认为该方法应该返回两个值xStep和yStep。我错过什么了吗?那么也许你应该从一开始就问真正的问题。。。这个函数很可能返回两个32位值而不是一个64位值的小结构。如果没有额外的上下文,您无法真正区分这两种情况;结果发现返回值是一些垃圾。@MachinTosh:如果您试图检索输入值,那么很有可能在本例中检索的是同一类型的
CGFloat
。请注意,浮点数和整数的返回方式不同。(这就是为什么您需要在问题前面包含所有信息!)