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
。请注意,浮点数和整数的返回方式不同。(这就是为什么您需要在问题前面包含所有信息!)