1. 程式人生 > >使用Python分析ELF檔案優化Flash和Sram空間的案例

使用Python分析ELF檔案優化Flash和Sram空間的案例

1. 背景

Zephyr專案Flash和Ram空間比較緊張,有著非常強烈的優化需求。

優化的前提是量化標的,那麼如何量化Flash和Ram的使用量呢?

在量化之後,首先要對量化結果進行分析,然後採取措施進行空間優化。

2. 基於ELF資訊和linker.cmd分析Flash/Ram使用量

linker.cmd檔案中規定了不同section在Flash還是在Ram中,還是兼而有之。

這是一個很有用的資訊,基於此我們只需要去羅列每個section的symbol,然後統計大小;就可以知道section的資訊;進而知道都有那些symbol在(Flash, Ram)中,都與多大。

分析ELF檔案可以獲得Sections和Symbols的詳細資訊。

Sections資訊可以將,Sections的Index和Name對應起來。

Symbols資訊可以將Symbol的Name、Size、Index和Sections的Index對應起來。

這樣子就可以對ELF檔案形成ELF-->Sections-->Symbols的樹形結構關係。

輸出結果是每個sections中symbol大小降序排列的csv檔案,和顯示最高top_counts個大小列表。

3. 分析Flash/Ram使用情況

3.1 總體使用情況分析

從Flash/Ram總大小使用情況,可以看出Ram空間告急,Flash空間也不樂觀。

由於每個Section按降序排列了所有符號表,所以從最大入手效果最明顯。

 

相關推薦

使用Python分析ELF檔案優化FlashSram空間案例

1. 背景 Zephyr專案Flash和Ram空間比較緊張,有著非常強烈的優化需求。 優化的前提是量化標的,那麼如何量化Flash和Ram的使用量呢? 在量化之後,首先要對量化結果進行分析,然後採取措施進行空間優化。 2. 基於ELF資訊和linker.cmd分析Flash/Ram使用量 linker.cmd

使用Python分析ELF文件優化FlashSram空間案例

其中 靜態 特性 ons 空間優化 uart 實現 top odata 1. 背景 Zephyr項目Flash和Ram空間比較緊張,有著非常強烈的優化需求。 優化的前提是量化標的,那麽如何量化Flash和Ram的使用量呢? 在量化之後,首先要對量化結果進行分析,然後采取措施

python分析患者資料:pandas matplotlib

使用python進行資料清洗及視覺化 今天第一次使用pandas和matplotlib處理資料,以下紀錄一些使用心得: 1、首先第一步就是要匯入一些使用包: import numpy as np import pandas as pd import matplotlib.pypl

利用Python實現csv檔案的合併去重

方法一: 這種方法需要引入glob模組 glob模組是最簡單的模組之一,內容非常少。用它可以查詢符合特定規則的檔案路徑名。跟使用windows下的檔案搜尋差不多。查詢檔案只用到三個匹配符:”*”, “?”, “[]”。”*”匹配0個或多個字元;”?”匹配單個字元;”[]”匹配指定範圍內的

GDB分析ELF檔案常用的除錯技巧

1 from pwn import * 2 3 #r = remote(‘127.0.0.1‘, 9527) 4 r = process(‘./pwn3‘) 5 r.recvuntil(‘name \n‘) 6 r.sendline(‘123‘) 7 #raw_input(‘debug‘

python之動態引數 *args,**kwargs名稱空間

一、函式的動態引數 *args,**kwargs, 形參的順序1、你的函式,為了拓展,對於傳入的實引數量應該是不固定,所以就需要用到萬能引數,動態引數,*args, **kwargs 1,*args 將所有實參的位置引數聚合到一個元組,並將這個元組賦值給args(起作用的是* 並不是args,但是約

Oracle,查詢 表空間對應的資料檔案,使用者空間對應關係

--查詢表空間對應的資料檔案 select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id; --使用者和表空間對應關係 select   use

Linux逆向---ELF格式分析檔案程式頭

在Linux下,可以利用vim編輯器來對編譯生成後的可執行程式進行編輯,比如說把75jne指令改成74je指令,這樣可以在不重新編譯的情況下去修改程式的控制流,這樣玩感覺還是很有意思的,不過也僅限於此,所以我借了一本書想要學學逆向。。結果發現這本書真的難啃。。如果只是讀它的內容的話很快就讀過

Keil編譯後的Code,RO,RW,ZI分別表示什麽以及芯片FlashSRAM的對應關系

rtex-m3 位置 bsp 部分 mem sram www cor stm32f4 在使用keil開發STM32應用程序時,點擊Build後在Build Output窗口中經常會有如下信息:<ignore_js_op> 以前一直好奇這幾個參數和實際使用的STM

Python第七課----正則日誌分析

python一、正則表達式:1、分類: 1、BRE基本正則,grep、sed,vi等軟件支持,vim有擴展 2、ERE擴展正則,egrep、grep-E,sed-r等 3、PCRE最重要的,高級語言中的2、基本語法: 1、元字符 metacharacter.匹配除了換行符外任意一字符,叠代

MySQL的SQL執行性能分析以及性能優化策略步驟

itl com pos url sql href class 分析 www. MySQL 的性能(下篇)—— 性能優化方法MySQL的SQL執行性能分析以及性能優化策略和步驟

Python分析NGINX日誌裏面相同IP第一次訪問時間最後一次訪問時間

NGINX 日誌分析 Python 有個小夥伴在群裏問如何分析一下相同IP訪問NGINX的第一次訪問時間和最後一次訪問時間,折騰了好一會最後寫出來測試一下,OK沒問題的,所以就記錄在這裏。思路:1、文件讀取2、先找出只訪問一次的 只有一次時間3、訪問多次的 尋找開始時間和 最後一次時間

mysql性能優化-慢查詢分析優化索引配置【轉】

簡單的 ssi any 通過命令 字型 reat created 效果 tle 一、優化概述 二、查詢與索引優化分析 1性能瓶頸定位 Show命令 慢查詢日誌 explain分析查詢 profiling分析查詢 2索引及查詢優化 三、配置優化 1) max_c

python讀取大檔案的方法 python計算檔案的行數讀取某一行內容的實現方法

 python計算檔案的行數和讀取某一行內容的實現方法 :最簡單的辦法是把檔案讀入一個大的列表中,然後統計列表的長度.如果檔案的路徑是以引數的形式filepath傳遞的,那麼只用一行程式碼就可以完成我們的需求了:   1、http://blog.csdn.net/shudaq

如何用Python進行大資料探勘分析

大資料無處不在。在時下這個年代,不管你喜歡與否,在運營一個成功的商業的過程中都有可能會遇到它。 什麼是大資料? 大資料就像它看起來那樣——有大量的資料。單獨而言,你能從單一的資料獲取的洞見窮其有限。但是結合複雜數學模型以及強大計算能力的TB級資料,卻能創造出人類無法制造的洞見。大資料分析提供

從SpringBoot原始碼分析 配置檔案的載入原理優先順序

從SpringBoot原始碼分析 配置檔案的載入原理和優先順序 本文從SpringBoot原始碼分析 配置檔案的載入原理和配置檔案的優先順序     跟入原始碼之前,先提一個問題:   SpringBoot 既可以載入指定目錄下的配置檔案獲取配置項,也可

11月10日python爬蟲分析網頁的模組lxmlBeautiful Soup

unicode是字符集,不是編碼方式 ajax返回的是json字串,json字元是類字典的形式,裡面是鍵值對 format自動排列 # 定義檔案儲存的位置,原始的定義要改變的地方是定義在字串中的 fileName = 'g:/spider/poetry/poetry{0}.html' f

python基礎之檔案操作簡單的類

檔案操作 #檔案刪除 import os path=".\\data\\" for s in os.listdir(path): filename=path+s print(filename) # os.remove("test.txt") #檔案開啟 f=open('test.

使用Python進行資料分析--------------NumPy基礎:陣列向量計算

NumPy(Numerical重點內容 Python的簡稱) 是Python數值計算最重要的基礎包。大多數提供科學計算的包都是用NumPy的陣列作為構建基礎。 NumPy的部分功能如下: - ndarray,一個具有向量算術運算和複雜廣播能力的快速且節省空間的多維陣列。 -

python讀取大檔案普通檔案

讀取檔案,最常見的方式是: with open('filename', 'r', encoding = 'utf-8') as f: for line in f.readlines(): do_something(line) 但是,當完成這一操作時,readlines()