Friday 27 January 2012

Wywołanie metody w iOS

Analizując pliki wykonywalne dla systemu iOS można zauważyć, że importowanych jest ograniczona liczba funkcji zewnętrznych a w kodzie wykonywalnym natomiast najwięcej jest odwołań do jednej funkcji objc_msgSend. Jest to związane z tym, że aplikacje dla iOS pisane są w języku Objective-C. Funkcja ta wykorzystywana jest do wysyłana wiadomości do obiektu. Poniżej fragment kodu w IDA Pro.


Funkcja ta przyjmuje, co najmniej dwa parametry: the Receiver – wskaźnik do instancji klasy, która otrzymuje wiadomość oraz theSelector wskazujący metodę, która obsłuży wiadomość. Funkcja może przyjąć też inne parametry, które są argumentami dla wywoływanej metody.

id objc_msgSend(id theReceiver, SEL theSelector, ...)

Z przedstawionego fragmentu wygenerowanego przez IDA Pro wyraźnie widać jaka metoda (kolor zielony) jest wywoływana za pomocą objc_msgSend oraz czy i jakie argumenty są do niej przekazywane (kolor niebieski).
Należy dodać, że IDA Pro rozpoznaje też zadeklarowane przez programistę metody dla klasy (rysunek poniżej).


Powyższe informacje, to pierwszy krok w celu zrozumienia działania aplikacji. Możemy odtworzyć metody klasy (znak +) i metody instancji dla klasy (znak -). Możemy też odtworzyć listę argumentów dla klasy (o tym w następnym artykule). W końcu możemy również odbudowywać kod źródłowy programu. Z przedstawionego na początku fragmentu kodu wynika, że fragment funkcji main jest następujący:

MojaKlasa * objekt_MojaKlasa = [[MojaKlasa alloc] init];
[objekt_MojaKlasa metodaInstancji:@”Input z main.m”];
[MojaKlasa metodaKlasy];

1 comment:

  1. Casino City 2021 - DrmCD
    The casino is known for its amazing games, the 경기도 출장샵 good old games, good 남원 출장안마 dining options, thrilling casino promotions, incredible gaming, 밀양 출장샵 and exciting 고양 출장마사지 slots  목포 출장마사지 Rating: 4.4 · ‎44 votes

    ReplyDelete