zoukankan      html  css  js  c++  java
  • [转]Use the IDA and LLDB explore WebCore C + + class inheritance

    原文:http://www.phonesdevelopers.com/1781016/




    The surgery class named PluginWidgetIOS use lldb can get:

    1. (lldb) image lookup -r -s PluginWidgetIOS  
    2. 7 symbols match the regular expression 'PluginWidgetIOS' in /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/PrivateFrameworks/WebKit.framework/WebKit:  
    3.         Address: WebKit[0x0003a5a0] (WebKit.TEXT.text + 231680)  
    4.         Summary: WebKitPluginWidgetIOS::~PluginWidgetIOS()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Address:&nbsp;WebKit[0x0003a5b0]&nbsp;(WebKit.__TEXT.__text&nbsp;+&nbsp;231696)&nbsp;&nbsp;</span>
      </li>
      <li class="alt" style="border-style: none none none solid; border-left- 3px; border-left-color: #6ce26c; list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; margin: 0px !important; padding: 0px 3px 0px 10px !important;" data-iceapw="8" data-iceapc="1">
      <span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;" data-iceapw="8">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Summary:&nbsp;WebKit
      PluginWidgetIOS::~PluginWidgetIOS()        Address: WebKit[0x0003a6f0] (WebKit.TEXT.text + 232016)  
    5.         Summary: WebKitPluginWidgetIOS::platformLayer()&nbsp;const&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Address:&nbsp;WebKit[0x0003a750]&nbsp;(WebKit.__TEXT.__text&nbsp;+&nbsp;232112)&nbsp;&nbsp;</span>
      </li>
      <li class="alt" style="border-style: none none none solid; border-left- 3px; border-left-color: #6ce26c; list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; margin: 0px !important; padding: 0px 3px 0px 10px !important;" data-iceapw="9" data-iceapc="1">
      <span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;" data-iceapw="9">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Summary:&nbsp;WebKit
      PluginWidgetIOS::willProvidePluginLayer() const        Address: WebKit[0x0003a7b0] (WebKit.TEXT.text + 232208)  
    6.         Summary: WebKitPluginWidgetIOS::attachPluginLayer()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Address:&nbsp;WebKit[0x0003a810]&nbsp;(WebKit.__TEXT.__text&nbsp;+&nbsp;232304)&nbsp;&nbsp;</span>
      </li>
      <li class="alt" style="border-style: none none none solid; border-left- 3px; border-left-color: #6ce26c; list-style: decimal-leading-zero outside; color: inherit; line-height: 18px; margin: 0px !important; padding: 0px 3px 0px 10px !important;" data-iceapw="8" data-iceapc="1">
      <span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;" data-iceapw="8">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Summary:&nbsp;WebKit
      PluginWidgetIOS::detachPluginLayer()        Address: WebKit[0x001335e0] (WebKit.DATA.data + 560)  
    7.         Summary: vtable for PluginWidgetIOS  

    Useful information:

    1. Address: WebKit[0x001335e0] (WebKit.DATA.data + 560)  
    2.         Summary: vtable for PluginWidgetIOS  

    IDA Open WebCore static library, goto (shortcuts g) vtable address where 0x1335e0, you can see:

    1. data:001335E0 ; `vtable for'PluginWidgetIOS  
    2. data:001335E0 ZTV15PluginWidgetIOS db    0          ; DATA XREF: nlsymbolptr:ZTV15PluginWidgetIOSptro  
    3. data:001335E1                 db    0  
    4. data:001335E2                 db    0  
    5. data:001335E3                 db    0  
    6. data:001335E4                 db    0  
    7. data:001335E5                 db    0  
    8. data:001335E6                 db    0  
    9. data:001335E7                 db    0  
    10. data:001335E8                 dd offset ZN15PluginWidgetIOSD1Ev ; PluginWidgetIOS::~PluginWidgetIOS()  
    11. data:001335EC                 dd offset ZN15PluginWidgetIOSD0Ev ; PluginWidgetIOS::~PluginWidgetIOS()  
    12. data:001335F0                 dd offset ZN7WebCore6Widget12setFrameRectERKNS7IntRectE ; WebCore::Widget::setFrameRect(WebCore::IntRect  const&)  
    13. data:001335F4                 dd offset ZN7WebCore6Widget5paintEPNS15GraphicsContextERKNS7IntRectE ; WebCore::Widget::paint(WebCore::GraphicsContext ,WebCore::IntRect  const&)  
    14. data:001335F8                 dd offset ZN12PluginWidget14invalidateRectERKN7WebCore7IntRectE ; PluginWidget::invalidateRect(WebCore::IntRect  const&)  
    15. data:001335FC                 dd offset ZN7WebCore6Widget8setFocusEb ; WebCore::Widget::setFocus(bool)  
    16. data:00133600                 dd offset ZN7WebCore6Widget4showEv ; WebCore::Widget::show(void)  
    17. data:00133604                 dd offset ZN7WebCore6Widget4hideEv ; WebCore::Widget::hide(void)  
    18. data:00133608                 dd offset ZN7WebCore6Widget16setParentVisibleEb ; WebCore::Widget::setParentVisible(bool)  
    19. data:0013360C                 dd offset ZNK7WebCore6Widget11isFrameViewEv ; WebCore::Widget::isFrameView(void)  
    20. data:00133610                 dd offset ZNK7WebCore6Widget12isPluginViewEv ; WebCore::Widget::isPluginView(void)  
    21. data:00133614                 dd offset ZNK7WebCore14PluginViewBase16isPluginViewBaseEv ; WebCore::PluginViewBase::isPluginViewBase(void)  
    22. data:00133618                 dd offset ZNK7WebCore6Widget11isScrollbarEv ; WebCore::Widget::isScrollbar(void)  
    23. data:0013361C                 dd offset ZN7WebCore6Widget9setParentEPNS_10ScrollViewE ; WebCore::Widget::setParent(WebCore::ScrollView )  
    24. data:00133620                 dd offset ZN7WebCore6Widget11handleEventEPNS5EventE ; WebCore::Widget::handleEvent(WebCore::Event *)  
    25. data:00133624                 dd offset ZN7WebCore6Widget12notifyWidgetENS18WidgetNotificationE ; WebCore::Widget::notifyWidget(WebCore::WidgetNotification)  
    26. data:00133628                 dd offset ZN7WebCore6Widget17frameRectsChangedEv ; WebCore::Widget::frameRectsChanged(void)  
    27. data:0013362C                 dd offset ZN7WebCore6Widget22widgetPositionsUpdatedEv ; WebCore::Widget::widgetPositionsUpdated(void)  
    28. data:00133630                 dd offset ZN7WebCore6Widget25transformsAffectFrameRectEv ; WebCore::Widget::transformsAffectFrameRect(void)  
    29. data:00133634                 dd offset ZNK7WebCore6Widget23convertToContainingViewERKNS7IntRectE ; WebCore::Widget::convertToContainingView(WebCore::IntRect  const&)  
    30. data:00133638                 dd offset ZNK7WebCore6Widget25convertFromContainingViewERKNS7IntRectE ; WebCore::Widget::convertFromContainingView(WebCore::IntRect  const&)  
    31. data:0013363C                 dd offset ZNK7WebCore6Widget23convertToContainingViewERKNS8IntPointE ; WebCore::Widget::convertToContainingView(WebCore::IntPoint  const&)  
    32. data:00133640                 dd offset ZNK7WebCore6Widget25convertFromContainingViewERKNS8IntPointE ; WebCore::Widget::convertFromContainingView(WebCore::IntPoint  const&)  
    33. data:00133644                 dd offset ZNK7WebCore6Widget13axObjectCacheEv ; WebCore::Widget::axObjectCache(void)  
    34. data:00133648                 dd offset ZNK15PluginWidgetIOS13platformLayerEv ; PluginWidgetIOS::platformLayer(void)  
    35. data:0013364C                 dd offset ZNK15PluginWidgetIOS22willProvidePluginLayerEv ; PluginWidgetIOS::willProvidePluginLayer(void)  
    36. data:00133650                 dd offset ZN15PluginWidgetIOS17attachPluginLayerEv ; PluginWidgetIOS::attachPluginLayer(void)  
    37. data:00133654                 dd offset ZN15PluginWidgetIOS17detachPluginLayerEv ; PluginWidgetIOS::detachPluginLayer(void)  
    38. data:00133658                 dd offset ZN7WebCore14PluginViewBase12scriptObjectEPN3JSC14JSGlobalObjectE ; WebCore::PluginViewBase::scriptObject(JSC::JSGlobalObject *)  
    39. data:0013365C                 dd offset ZN7WebCore14PluginViewBase27privateBrowsingStateChangedEb ; WebCore::PluginViewBase::privateBrowsingStateChanged(bool)  
    40. data:00133660                 dd offset ZN7WebCore14PluginViewBase12getFormValueERN3WTF6StringE ; WebCore::PluginViewBase::getFormValue(WTF::String &)  
    41. data:00133664                 dd offset ZN7WebCore14PluginViewBase6scrollENS15ScrollDirectionENS17ScrollGranularityE ; WebCore::PluginViewBase::scroll(WebCore::ScrollDirection,WebCore::ScrollGranularity)  
    42. data:00133668                 dd offset ZN7WebCore14PluginViewBase19horizontalScrollbarEv ; WebCore::PluginViewBase::horizontalScrollbar(void)  
    43. data:0013366C                 dd offset ZN7WebCore14PluginViewBase17verticalScrollbarEv ; WebCore::PluginViewBase::verticalScrollbar(void)  
    44. data:00133670                 dd offset ZN7WebCore14PluginViewBase16wantsWheelEventsEv ; WebCore::PluginViewBase::wantsWheelEvents(void)  
    45. __data:00133674                 align 10h  

    This is virtual function table PluginWidgetIOS. You can see from the comment after the semicolon function directly perform address point to the Widget, PluginWidget, PluginViewBase the function can the know PluginWidgetIOS is their direct or indirect subclass.

    Reuse of the lldb image lookup these three classes, you can see the inheritance chain:

    PluginWidgetIOS-> PluginViewBase-> PluginWidget-> Widget

    The because the virtual list PluginWidget does not appear PluginViewBase the the Widget virtual table does not appear PluginWidget and PluginViewBase. Of course, these three classes in the open source can find inheritance.

  • 相关阅读:
    如何从程序集中加载及卸载插件(下)
    Castle AOP 系列(四):实现一个简单的基于上下文调用的权限校验机制
    Castle AOP 系列(一):对类方法调用的拦截
    Mussel使用系列(六):分布式调用的牛刀小试
    新发现XmlNode中变态的地方
    我们发现你在XX邮箱的账号密码与其他网站被盗账号密码一致 请立即更改密码。
    html5 css3 新特性一览表
    [android] Http Post 请求
    [vs 使用技巧] VS2013显示行数 行号
    ORACLE数据库存储使用情况查询命令
  • 原文地址:https://www.cnblogs.com/Proteas/p/3899311.html
Copyright © 2011-2022 走看看