Dex檔案的記憶體對映

2021-06-26 12:11:23 字數 1055 閱讀 5007

前面我們了解過dex檔案的檔案格式,資料型別等知識,這裡我們來簡單分析一下,dex檔案在記憶體中的對映關係。

dexfile的結構體原始碼如下:

struct dexfile ;
在dexheader結構中,有乙個mapoff欄位,它指明了dexmaplist結構在dex檔案中的偏移,它的宣告如下:

struct dexmaplist;

struct dexmapitem ;

第乙個字段表示item的型別,unused暫時沒有用處,size表示這樣型別的item有幾個,offset表示相對於檔案開始位址的偏移。

在hello.dex檔案中,mapoff字段值為0x290,讀取此處乙個雙字值為0x0d,表明接下來會有13個dexmapitem結構。使用c32asm開啟dex檔案,如圖所示:

0x290處的值:

mapoff處的字段值:

這裡我們給出dexmap的結構圖示,其實是一些結構體。下面就是在hello.dex檔案分析中得到的13個結構體的資料,偏移量等資訊,如下圖所示:

這裡表示headeritem有0x1個,偏移為0x0,typestringiditem個數為0x10,偏移為0x70,後面的大家以此類推。

對於剛開始分析記憶體位址,彙編**等的同學,可能看不太明白,這裡的資料是怎麼的出來的。這裡涉及到一些暫存器位址儲存方式的問題,有的位址是從低位向高位,有的是從高位向低位劃分。

挺別人說的,不如自己手動劃一下來得深切,大家動手看看吧。

記憶體對映檔案

記憶體對映檔案是利用虛擬記憶體把檔案對映到程序的位址空間中去,在此之後程序操作文 件,就像操作程序空間裡的位址一樣了,比如使用 memcpy 等記憶體操作的函式。這種方法能 夠很好的應用在需要頻繁處理乙個檔案或者是乙個大檔案的場合,這種方式處理 io效率比 普通 io效率要高。另外,unix 把它做...

記憶體對映檔案

記憶體對映檔案有三種,第一種是可執行檔案的對映,第二種是資料檔案的對映,第三種是借助頁面交換檔案的記憶體對映.應用程式本身可以使用後兩種記憶體對映.1.可執行檔案對映 windows在執行乙個win32應用程式時使用的是記憶體對映檔案技術.系統先在程序位址空間的0x00400000以上保留乙個足夠大...

記憶體檔案對映

一直都對記憶體對映檔案這個概念很模糊,不知道它和虛擬記憶體有什麼區別,而且對映這個詞也很讓人迷茫,今天終於搞清楚了。下面,我先解釋一下我對對映這個詞的理解,再區分一下幾個容易混淆的概念,之後,什麼是記憶體對映就很明朗了。首先,對映 這個詞,就和數學課上說的 一一對映 是乙個意思,就是建立一種一一對應...