Android ELF文件got表符號偏移的確定

眾所周知Android的動態(tài)鏈接器是linker办桨,iOS是dyld巨坊,linux是ld-linux.so.2够坐。由于同是linux內(nèi)核,所以Android的linker與linux很相似巩检,最大的區(qū)別就是linker不支持懶綁定,懶綁定的相關知識請參考我的另一篇博客linux plt 的實現(xiàn)示启。所以當Android的so或可執(zhí)行文件在調(diào)用外部定義的函數(shù)之前l(fā)inker已經(jīng)把函數(shù)的偏移寫到got表中兢哭,我們看一下如何通過ELF文件的結構獲取到got表的偏移。

首先我要獲取.dynsym .dynstr .rel.plt三個節(jié)的數(shù)據(jù)

.rel.plt和dynsym的定義如下:

typedef struct{
Elf32_Addr  r_offset;
Elf32_Word  r_info;
} Elf32_Rel;

typedef structelf32_sym{
     Elf32_Word    st_name;
     Elf32_Addr    st_value;
     Elf32_Word    st_size;
     unsignedcharst_info;
     unsignedcharst_other;
     Elf32_Half     st_shndx;
} Elf32_Sym;

獲取.rel.plt每個重定位表所對應的符號的步驟:
1夫嗓、使用ELF32_R_SYM宏(參數(shù)為.rel.plt的r_info)獲取符號在.dynsym中的偏移
2迟螺、找到對應的dynsym在獲取.dynsym的st_name字段,但這個字段不是字符串舍咖,也是一個偏移矩父,是.dynstr節(jié)的偏移
3、通過偏移可以獲取到相應的符號

以下代碼來自于網(wǎng)絡排霉,是尋找got符號的程序?qū)崿F(xiàn):

for (i = 0; i < relplt_shdr->sh_size / sizeof(Elf32_Rel); i++){ 
    uint16_t ndx = ELF32_R_SYM(rel_ent->r_info); 
    LOGD("ndx = %d, str = %s", ndx, dynstr + dynsymtab[ndx].st_name);
    if (strcmp(dynstr + dynsymtab[ndx].st_name, symbol_name) == 0) { 
      LOGD("符號%s在got表的偏移地址為: 0x%x", symbol_name, rel_ent->r_offset); 
      offset = rel_ent->r_offset; 
      break;
    } 
    if(read(fd, rel_ent, sizeof(Elf32_Rel)) != sizeof(Elf32_Rel)) {
    LOGD("獲取符號%s的重定位信息失敗", symbol_name); return -1; }
}

如果是一個靜態(tài)綁定的符號獲取方式就是獲取.dynsym結構體st_value字段的值

for(i = 0; i < (dynsym_shdr->sh_size) / sizeof(Elf32_Sym); ++i) { 
    if(strcmp(dynstr + dynsymtab[i].st_name, symbol_name) == 0) { 
        LOGD("符號%s的地址位: 0x%x", symbol_name, dynsymtab[i].st_value); 
        offset = dynsymtab[i].st_value; 
        break; 
    }
 }

以上代碼出自Android GOT表HOOK技術

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窍株,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌球订,老刑警劉巖后裸,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冒滩,居然都是意外死亡微驶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門开睡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來因苹,“玉大人,你說我怎么就攤上這事士八∪菅啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵婚度,是天一觀的道長蘸秘。 經(jīng)常有香客問我,道長蝗茁,這世上最難降的妖魔是什么醋虏? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮哮翘,結果婚禮上颈嚼,老公的妹妹穿的比我還像新娘。我一直安慰自己饭寺,他們只是感情好阻课,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著艰匙,像睡著了一般限煞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上员凝,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天署驻,我揣著相機與錄音,去河邊找鬼健霹。 笑死旺上,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的糖埋。 我是一名探鬼主播宣吱,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瞳别!你這毒婦竟也來了凌节?” 一聲冷哼從身側響起钦听,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倍奢,沒想到半個月后朴上,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡卒煞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年痪宰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畔裕。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡衣撬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扮饶,到底是詐尸還是另有隱情具练,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布甜无,位于F島的核電站扛点,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏岂丘。R本人自食惡果不足惜陵究,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奥帘。 院中可真熱鬧铜邮,春花似錦、人聲如沸寨蹋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽已旧。三九已至秸苗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間评姨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工萤晴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吐句,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓店读,卻偏偏與公主長得像嗦枢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子屯断,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評論 25 707
  • 1. 背景 在我們的日常工作中經(jīng)常會遇到一些BUG文虏,而且這些BUG發(fā)生在native層侣诺,也就是在我們的so共...
    2baf611355d8閱讀 17,175評論 3 41
  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運行的地址不確定 關于...
    SeanCST閱讀 7,813評論 0 27
  • 概要 SO文件是Linux下共享庫文件氧秘,它的文件格式被稱為ELF文件格式年鸳。由于Android操作系統(tǒng)的底層基于Li...
    羊角包閱讀 25,353評論 1 14
  • 首先是寫倪泥飾演的程羽蒙在和一幫富豪千金一起吃飯的場景搔确,美食方面的卓越表現(xiàn),把她美食專欄作家的頭銜發(fā)揮的淋漓盡致灭忠。...
    解憂雜貨店520閱讀 386評論 0 1