- 論壇徽章:
- 39
|
回復(fù) 5# kingroc711
我說(shuō)的只是方案只一,做校驗(yàn)并不一定非的要這個(gè)方案.
既然你想知道這個(gè)方案的具體實(shí)現(xiàn),我就再細(xì)說(shuō)下
要獲取自己的map表其實(shí)很簡(jiǎn)單.直接讀取`/proc/self/maps`這個(gè)文件即可.其中的self也可以用getpid()來(lái)活取pid,修改成`/proc/$(pid)/maps`來(lái)讀取,結(jié)果是一樣的.
然后就是行遍歷,字符串截取了,你看幾個(gè)maps文件就知道了,里面有當(dāng)前程序所有加載的動(dòng)態(tài)庫(kù)文件路徑,如果要用maps做校驗(yàn),觀察下就能得出,app的so都是放在`/data/data/$(packageName)/lib`下面,但是再maps可能看到并不是這個(gè)文件,但也是有規(guī)律的,這個(gè)規(guī)律和版本也有一定關(guān)系.maps顯示的路徑一般是軟連接的真實(shí)路徑.
比如4.4的是`/data/app-lib/$(packageName)-[1|2]/`,不管這個(gè)路徑怎么變化,系統(tǒng)的規(guī)則里面一定有packageName,簡(jiǎn)單判斷路徑中是否有packageName就能做到一次判斷,如果要做的跟好,就的精確一點(diǎn)了.
|
|