pushl %ebp
movl %esp,%ebp
pushl %ebx
Установить фрейм стека и сохранить регистр ebx.
movl 0x08(%ebp),%eax
Загрузить первый аргумент стека (из ebp + 8) в eax.
movl 0x4c(%eax),%edx
Загрузить 32-битное значение из поля со смещением 0x4C от адреса в eax в edx.
movl 0x50(%eax),%ebx
Загрузить 32-битное значение из поля со смещением 0x50 от адреса в eax в ebx.
movl %edx,%eax
movl %ebx,%edx
Переместить ранее загруженные значения в eax и edx соответственно.
popl %ebx
leave
ret
Восстановить сохраненный регистр ebx, разобрать кадр стека и вернуть.
Поскольку код устанавливает как eax, так и edx непосредственно перед возвратом, мы можем заключить, что тип возвращаемого значения 64-битный. Вы также можете заметить, что две загрузки предназначены для последовательных местоположений (0x4C + 4 == 0x50). Поэтому, скорее всего, первый (и единственный) аргумент - это указатель на структуру, имеющую 64-битный член со смещением 0x4C, и функция возвращает его значение.
typedef struct _CGPattern
{
...
uint64_t step; // offset 0x4C
...
} CGPattern;
uint64_t CGPatternGetStep(CGPattern *pat)
{
return pat->step;
}