一、环境
wsl ubuntu18.04、python3.6
二、目的
调试程序,需要分析第三方库。希望能将多个库自动转为汇编文件。
三、使用方法
将该脚本下载,进入wsl,进入到该脚本所有文件夹。
请使用 python 脚本名.py 运行。
1)、运行第一次,此时会出现o, a, dis三个文件夹。
2)、将需要分析的.a放入子目录a中。
3)、运行第二次,结束后,发现反汇编文件全部在dis目录内。
四:代码(python3.6) 与 下载
import os
PATH_LIBA = "a"
PATH_OBJECT = "o"
PATH_DIS = "dis"
CC = "arm-none-eabi-"
folder_path = "./"+PATH_LIBA
def ar_x(fileName):
print(fileName)
os.system(f"ar -x {fileName}")
def mov_object_to_dir_O():
"""
for root, dirs, files in os.walk("./"):
for f in files:
if f.endswith(".o"):
os.system(f"mv {f} ./o")
"""
os.system(f"mv *.o ./o")
print("-"*40 + "move object to dir ./O finish.." + "-"*40)
def objdump(fileName):
print(fileName)
os.system(f"{CC}objdump -d {PATH_OBJECT+'/'+fileName}.o > {fileName}.dis")
def mov_dis_to_dir_dis():
os.system(f"mv *.dis ./dis")
if __name__ == "__main__":
print(folder_path)
os.system(f"mkdir -p {PATH_LIBA} {PATH_OBJECT} {PATH_DIS}")
for root, dirs, files in os.walk(folder_path):
print(f"current dir:{root}")
#print(f"current dir sub:{dirs}")
#print(f"current file:{files}")
for f in files:
if f.endswith(".a"):
ar_x(PATH_LIBA+"/"+f)
mov_object_to_dir_O()
print("-"*40 + "ar -x finish" + "-"*40)
for root, dirs, files in os.walk("./"+PATH_OBJECT):
print(f"current dir:{root}")
for f in files:
if f.endswith(".o"):
objdump(f.replace(".o", ""))
mov_dis_to_dir_dis()
print("-"*40 + f"{CC}objdump finish" + "-"*40)
print("-"*40 + "total finish" + "-"*40)
PATH_LIBA = "a"
PATH_OBJECT = "o"
PATH_DIS = "dis"
CC = "arm-none-eabi-"
以上参数视情况修改。