ARM彙編模組內部資料訪問初步分析

來源:互聯網
上載者:User

因為任何一條指令與它需要訪問的模組內部資料之間的相對位置是固定的,只需要相對於當前指令加上固定的位移量就可以訪問模組內部資料了。

現有C代碼如下:

    struct binder_state *bs;    void *svcmgr = BINDER_SERVICE_MANAGER;    bs = binder_open(128*1024);    if (binder_become_context_manager(bs)) {        LOGE("cannot become context manager (%s)\n", strerror(errno));        return -1;    }    svcmgr_handle = svcmgr;    binder_loop(bs, svcmgr_handler);    return 0;

對應的彙編代碼:

binder_loop(bs, svcmgr_handler);

為例:

將bs和svcmgr_handler作為參數存入寄存器,然後跳轉到binder_loop函數地址執行,其中bs從R5拷貝到R0,R5又是第1個方框函數的傳回值R0賦值得來。

主要說說svcmgr_handler,從第3個方框看到R3=(svcmgr_handler_ptr - 0xA170),svcmgr_handler_ptr的地址在0xA15C,R3=0xFFEC,也就是-0x20,是相對於got表的位移量,

接著第4個方框內R1=R4+R3,其中R4=PC+(_GLOBAL_OFFSET_TABLE_ - 0x8792),PC是第2個方框內的PC值,總是等於當前地址+8,也就是0x8796,_GLOBAL_OFFSET_TABLE_的地址是0xA170,所以R1=0x8796+0xA170-0x8792+0xA15C-0xA170=0xA15C+4=0xA160。

(PC值似乎有點問題,有待進一步研究哈)

(to be continued)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.