layout: post
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),烏拉特后企業(yè)網(wǎng)站建設(shè),烏拉特后品牌網(wǎng)站建設(shè),網(wǎng)站定制,烏拉特后網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,烏拉特后網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
title: 如何遍歷Linux程序的So模塊
categories: Android
description: 如何遍歷linux程序的so模塊
keywords:
url:
??soinfo是個鏈表結(jié)構(gòu),從打印的信息來看,是從高地址到低地址排序的,因此要打開一個未加載的so,自然排在高地址位置,因此往后遍歷即可
先設(shè)定實驗環(huán)境:
# 造 5 個 目錄,每個目錄下,造 3 個 文件和兩個子目錄如下:
cd $HOME/tmp
for i in d1 d2 d3 d4 d5
do
mkdir -p $i
touch $i/1.txt $i/2.txt $i/3.txt
mkdir -p $i/tmp1 $i/tmp2
done
# 檢驗測試環(huán)境:
$ ls -lR d1
total 0
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 1.txt
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 2.txt
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 3.txt
drwxr-sr-x 2 wenlee comm 256 Dec 22 10:35 tmp1/
drwxr-sr-x 2 wenlee comm 256 Dec 22 10:35 tmp2/
# 利用下列腳本來實現(xiàn)你要做的:
cd $HOME/tmp
for i in */1.txt
do
echo "Found $i, save $i and remove everything else under $(dirname $i)/"
save_this_file=$(basename $i)
curr_dir=$(dirname $i)
# 把這個1.txt暫時存到/tmp里面去,為了避免已經(jīng)有同樣的檔案名稱在/tmp,加上$$ (i.e. PID)
mv $i /tmp/${save_this_file}.$$
rm -rf $curr_dir
mkdir -p $curr_dir
mv /tmp/${save_this_file}.$$ $curr_dir
done
# 屏幕執(zhí)行輸出如下:
Found d1/1.txt, save d1/1.txt and remove everything else under d1/
Found d2/1.txt, save d2/1.txt and remove everything else under d2/
Found d3/1.txt, save d3/1.txt and remove everything else under d3/
Found d4/1.txt, save d4/1.txt and remove everything else under d4/
Found d5/1.txt, save d5/1.txt and remove everything else under d5/
# 復(fù)驗實驗環(huán)境:
$ ls -l d?/*
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 d1/1.txt
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 d2/1.txt
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 d3/1.txt
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 d4/1.txt
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 d5/1.txt
OK?
thanks!
你可以參考如下實例代碼:function?getFile(file_name)?
local?f?=?assert(io.open(file_name,?'r'))
local?string?=?f:read("*all")
f:close()
return?string
end?function?writeFile(file_name,string)
local?f?=?assert(io.open(file_name,?'w'))
f:write(string)
f:close()
end?--從命令行獲取參數(shù),?如果有參數(shù)則遍歷指定目錄,沒有參數(shù)遍歷當(dāng)前目錄?if?arg[1]?~=?nil?then
cmd?=?"ls?"..arg[1]
else
cmd?=?"ls"?end?print("cmd",?cmd)
--io.popen?返回的是一個FILE,跟c里面的popen一樣?local?s?=?io.popen(cmd)
local?fileLists?=?s:read("*all")
print(fileLists)
while?true?do?--從文件列表里一行一行的獲取文件名?_,end_pos,?line?=?string.find(fileLists,?"([^\n\r]+.txt)",?start_pos)
if?not?end_pos?then?break?end?--????print?("wld",?line)?local?str?=?getFile(line)
--把每一行的末尾?1,?替換為?0,?local?new?=string.gsub(str,?"1,\n",?"0,\n");
--替換后的字符串寫入到文件。以前的內(nèi)容會清空?????writeFile(line,?new)
start_pos?=?end_pos?+?1?end