Skip to content

.as() and .vcast() don't handle multiple inheritance correctly #101

Closed
@cbiesinger

Description

@cbiesinger

Take BrowserAccessibilityManager (https://cs.chromium.org/chromium/src/content/browser/accessibility/browser_accessibility_manager.h?sq=package:chromium&g=0&l=127)

It inherits from two virtual classes, ui::AXTreeObserver and ui::AXTreeManager. If you have a pointer to an AXTreeManager, you need to adjust the pointer to get to a BrowserAccessibilityManager (at least with the way that gcc lays out these classes in memory). Note the different addresses:

(rr) p (ui::AXTreeManager*) 0x000055ea418a02f8
$36 = (content::BrowserAccessibilityManagerAuraLinux *) 0x55ea418a02e0

However, JsDbg will just try to look up the vtable through the address, notice a nonzero displacement, and throw an error.

(This breaks the ax-tree extension on Linux. I'm not sure why it works on Windows?)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions