сборка тайны айфона - PullRequest
       16

сборка тайны айфона

0 голосов
/ 04 февраля 2011

Я изучаю функцию iPhone-сборки, содержащую вызовы функций библиотеки open и fcntl. Поскольку я незнаком с языком ассемблера в целом, у меня возникают проблемы с пониманием выполнения программы. То, что я хотел бы знать, это параметры для функций open и fcntl. Любое другое объяснение того, что делает эта функция, также приветствуется.

Код:

-[Utilities openFileAsset]:    
00000a94        b590    push    {r4, r7, lr}  
00000a96        af01    add r7, sp, #4  
00000a98        b088    sub sp, #32  
00000a9a        ab01    add r3, sp, #4  
00000a9c        6018    str r0, [r3, #0]  
00000a9e        466b    mov r3, sp  
00000aa0        6019    str r1, [r3, #0]  
00000aa2        ab01    add r3, sp, #4  
00000aa4        681a    ldr r2, [r3, #0]  
00000aa6        4b4a    ldr r3, [pc, #296]  (0xbd0)  
00000aa8        447b    add r3, pc  
00000aaa        681b    ldr r3, [r3, #0]  
00000aac        1c10    adds    r0, r2, #0  
00000aae        1c19    adds    r1, r3, #0  
00000ab0    f001ee46    blx 0x2740  ; symbol stub for: _objc_msgSend  
00000ab4        1c03    adds    r3, r0, #0  
00000ab6        b2db    uxtb    r3, r3  
00000ab8        2b00    cmp r3, #0  
00000aba        d100    bne.n   0xabe  
00000abc        e086    b.n 0xbcc  
00000abe        4b45    ldr r3, [pc, #276]  (0xbd4)  
00000ac0        447b    add r3, pc  
00000ac2        681b    ldr r3, [r3, #0]  
00000ac4        681b    ldr r3, [r3, #0]  
00000ac6        1c1a    adds    r2, r3, #0  
00000ac8        4b43    ldr r3, [pc, #268]  (0xbd8)  
00000aca        447b    add r3, pc  
00000acc        681b    ldr r3, [r3, #0]  
00000ace        1c10    adds    r0, r2, #0  
00000ad0        1c19    adds    r1, r3, #0  
00000ad2        2201    movs    r2, #1  
00000ad4    f001ee34    blx 0x2740  ; symbol stub for: _objc_msgSend  
00000ad8        1c02    adds    r2, r0, #0  
00000ada        23f0    movs    r3, #240  
00000adc        005b    lsls    r3, r3, #1  
00000ade        1c10    adds    r0, r2, #0  
00000ae0        2102    movs    r1, #2  
00000ae2        1c1a    adds    r2, r3, #0  
00000ae4    f001ee84    blx 0x27f0  ; symbol stub for: _open  
00000ae8        1c02    adds    r2, r0, #0  
00000aea        4b3c    ldr r3, [pc, #240]  (0xbdc)  
00000aec        447b    add r3, pc  
00000aee        681b    ldr r3, [r3, #0]  
00000af0        601a    str r2, [r3, #0]  
00000af2        4b3b    ldr r3, [pc, #236]  (0xbe0)  
00000af4        447b    add r3, pc  
00000af6        681b    ldr r3, [r3, #0]  
00000af8        681b    ldr r3, [r3, #0]  
00000afa        1c18    adds    r0, r3, #0  
00000afc        2104    movs    r1, #4  
00000afe        2204    movs    r2, #4  
00000b00    f001ee0e    blx 0x2720  ; symbol stub for: _fcntl  

1 Ответ

1 голос
/ 05 февраля 2011

Вам нужно пойти и взять документацию ARM ABI.

Пока вам нужен только первый или два параметра, у Грега ", поэтому вы потерпели крах в objc_msgSend () ",отличный справочник (я использую его все время).

(Спойлер: первые три аргумента - это r0, r1 и r2 .... более или менее)

...