在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個python腳本看透Linux程序?qū)斓囊蕾?/h1>

在下今天寫了一個小小的python程序,可以在完全不看源代碼的情況下,分析a如果調(diào)用b.so的時候,會引用b.so的哪些函數(shù),它的用法如下:

./symbol-dep.py-sa-db.so

把a作為-s參數(shù),把b.so作為-d參數(shù)。

它的原理如下:

用nm -D --undefined-only命令可以列出一個程序依賴的需要動態(tài)鏈接的庫函數(shù),譬如:

用nm -D --defined-only命令可以列出一個動態(tài)鏈接庫給別人提供的函數(shù),譬如:

我們只要把a依賴的函數(shù),與b.so供給的函數(shù)中,求一個交集,即可在完全沒有源代碼的情況下,知道a會call到b.so的哪些函數(shù)。核心源代碼如下(部分用了省略號方便閱讀):

#!/usr/bin/python3

import sys, getopt, os

def main(argv):

...

try:

opts, args = getopt.getopt(...)

except getopt.GetoptError:

...

for opt, arg in opts:

if opt == '-h':

p...

elif opt in ("-s", "--sfile"):

srcfile = arg

elif opt in ("-d", "--dfile"):

dstfile = arg

# get the symbols srcfile depends on

src=os.popen("nm -D --undefined-only "+srcfile)

srclist=src.read().splitlines()

for sline in srclist:

neededsymbols.append(sline.split()[-1])

# get the symbols dstfile exports

dst=os.popen("nm -D --defined-only "+dstfile)

dstlist=dst.read().splitlines()

for dline in dstlist:

exportedsymbols.append(dline.split()[-1])

# intersection of src and dest

for symbol in neededsymbols:

if symbol in exportedsymbols:

print(symbol)

if __name__ == "__main__":

main(sys.argv[1:])

完整源代碼高亮后如下:

運行結(jié)果如下:

范例中a.out對應(yīng)的源代碼如下:

so easy。

希望你能夠喜歡這個小工具。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209503
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84689

原文標(biāo)題:宋寶華:一個簡單的python腳本看透Linux程序?qū)斓囊蕾?/p>

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Python如何管理所用的全部依賴

    Python 的項目中,如何管理所用的全部依賴呢?最主流的做法是維護份requirements.txt,記錄下依賴
    發(fā)表于 11-21 11:16 ?1397次閱讀
    <b class='flag-5'>Python</b>如何管理所用的全部<b class='flag-5'>依賴</b><b class='flag-5'>庫</b>

    10殺手級的Python自動化腳本

    今天浩道跟大家分享10日常工作中用到的python自動化腳本。讓你感受python簡單強大之處!
    發(fā)表于 11-28 11:07 ?684次閱讀

    13用于日常編程的高級Python腳本

    今天浩道跟大家分享13用于日常編程的高級python腳本。讓你不會寫腳本的也能感受到其魅力!
    發(fā)表于 12-09 11:47 ?625次閱讀

    查詢Linux應(yīng)用程序運行依賴哪些的方法

    查詢Linux應(yīng)用程序運行依賴哪些 法: $(CROSS_COMPILE)ldd AppName 如: arm_v5t_le-lld
    發(fā)表于 08-19 07:42

    Python操作Mysql實現(xiàn)數(shù)據(jù)腳本的方法概述

    Python操作Mysql數(shù)據(jù)腳本(cmd)
    發(fā)表于 10-08 10:44

    常用Python有那些38常用Python的詳細概述

    Python作為設(shè)計優(yōu)秀的程序語言,現(xiàn)在已廣泛應(yīng)用于各種領(lǐng)域,依靠其強大的第三方類Python
    的頭像 發(fā)表于 11-03 10:28 ?3.1w次閱讀

    ldd命令:用于打印程序或者共享文件所依賴的共享列表

    1.命令簡介 ldd 命令用于打印程序或者共享文件所依賴的共享列表。注意,ldd 本身不是
    的頭像 發(fā)表于 02-02 11:37 ?2077次閱讀

    ADM1266 Linux API和Python簡介

    ADM1266 Linux API和Python簡介
    發(fā)表于 05-17 10:50 ?6次下載
    ADM1266 <b class='flag-5'>Linux</b> API和<b class='flag-5'>Python</b><b class='flag-5'>庫</b>簡介

    python程序在嵌入式linux系統(tǒng)運行。。

    最近在寫運行在嵌入式linux系統(tǒng)下的python程序。中間遇到很多坑,接下來我就一一說下。從windows編寫python
    發(fā)表于 11-01 16:32 ?12次下載
    <b class='flag-5'>python</b><b class='flag-5'>程序</b>在嵌入式<b class='flag-5'>linux</b>系統(tǒng)運行。。

    Python編寫的輕量級數(shù)據(jù)

    TinyDB 是Python 編寫的輕量級數(shù)據(jù)共只有1800行代碼,沒有外部依賴
    的頭像 發(fā)表于 02-24 10:32 ?833次閱讀

    如何在Linux命令行中運行Python腳本

    Python種高級編程語言,被廣泛應(yīng)用于數(shù)據(jù)科學(xué)、機器學(xué)習(xí)、Web 開發(fā)等領(lǐng)域。在 Linux 操作系統(tǒng)中,Python
    的頭像 發(fā)表于 05-12 14:49 ?1689次閱讀

    如何查看linux程序共享呢?

    linux系統(tǒng)中,程序通常需要依賴于外部來正常工作。這些可以直接編譯到程序中,也可以從共享
    的頭像 發(fā)表于 08-28 09:11 ?1606次閱讀
    如何查看<b class='flag-5'>linux</b><b class='flag-5'>程序</b>共享<b class='flag-5'>庫</b>呢?

    SQLite數(shù)據(jù)python的區(qū)別

    SQLite數(shù)據(jù)python的區(qū)別 SQLite是種輕量級關(guān)系型數(shù)據(jù)管理系統(tǒng),是嵌入
    的頭像 發(fā)表于 08-28 16:41 ?867次閱讀

    TinyDB :Python編寫的輕量級數(shù)據(jù)

    TinyDB 是Python 編寫的輕量級數(shù)據(jù)共只有1800行代碼,沒有外部依賴
    的頭像 發(fā)表于 10-21 10:22 ?1001次閱讀

    如何使用linux下gdb來調(diào)試python程序

    如何使用linux下gdb來調(diào)試python程序? 在Linux下,可以使用GDB(GNU調(diào)試器)來調(diào)試Python
    的頭像 發(fā)表于 01-31 10:41 ?2624次閱讀

    主站蜘蛛池模板: 狠狠狠操| 成人欧美一区二区三区视频不卡| 成人国产精品毛片| 久久免费看视频| 国产精品11页| 久久综合九九亚洲一区| 日本噜噜影院| 成人免费aaaaa毛片| 久久久噜久噜久久gif动图| 免费一级特黄视频| 成片一卡三卡四卡免费网站| 美女张开大腿让男人捅| 欧美天天综合| 在线97| 狠狠尻| 永久免费人成网ww555kkk手机| 亚洲乱亚洲乱妇41p| 国产激情在线观看| 国产精品臀控福利在线观看| 四虎在线影院| 激激婷婷综合五| 免费一级成人毛片| 久久久久大香线焦| 亚洲吊丝网| 永久免费看片| 日本不卡免费高清一级视频| 美女黄色在线看| 国产精品秒播无毒不卡| 四虎必出精品亚洲高清| 午夜在线观看网站| 狠狠色噜噜狠狠狠狠97老肥女| 黄色三级网站免费| 午夜黄| 欧美就是色| 国产香蕉在线精彩视频| 四虎国产精品免费久久影院| 五月天婷婷色综合| 在线精品国产三级| 77788色淫网站免费观看| 欧美一区二区三区视频在线观看| 久久精品综合|