導航:首頁 > 操作系統 > android結構體數組

android結構體數組

發布時間:2025-09-12 13:59:56

android/Linux so動態庫分析和反編譯

開發環境的搭建涉及友善smart-210開發板作為平台。在進行so動態庫文件頭分析時,需明確其本質為ELF文件,且利用Elf32_Ehdr結構體定義ELF32頭文件。將armeabi-v7a類型的so動態庫文件放置於Linux系統路徑中,然後在Linux終端進入文件目錄,執行"readelf -h xxxx.so"命令,以查看文件頭部信息。

文件頭部信息包括Magic/e_ident[]用於標識ELF目標文件,Class標記文件類型為32位ELF格式,Data指示數據組織格式為小端格式,Version為當前文件頭版本號1。OS/ABI描述操作系統類,ABI Version為ABI版本號0。Type/e_type指明文件類型,這里是共享庫(Shared Library)。Machine/e_machine顯示機器平台類型為ARM類型,Version/e_version為當前目標文件版本號0x01。Entry point address/e_entry表示程序入口地址,Stars of program headers/e_phoff記錄程序頭表文件偏移,Stars of section headers/e_shoff記錄節區頭文件偏移。Flasgs/e_flags為處理器相關標識,Size of this header/e_ehsize表示ELF頭文件大小,Size of program headers/e_phentsize表示程序頭表頭目大小。Number of program headers/e_phnum表示程序頭表條目數量,Size of section headers/shentsize表示節區頭表條目大小,Number of section headers/e_shnum為節區頭表條目數量。節區頭字元表索引/e_shstrndx。

程序頭表通過Elf32_Phdr結構體描述,此表為數組,數組元素存儲程序頭表條目,描述段或其它信息以准備程序運行。文件段包含多個節區,程序頭表僅在可執行文件或共享對象文件中有意義。

反編譯so動態庫方法採用IDA軟體。首先解壓安裝包,安裝時注意避免中文路徑,隨後根據ReadMe文檔獲取密鑰。安裝完成後,打開軟體並點擊「GO」按鈕,拖拽so動態庫文件至工作區,點擊「OK」按鈕等待反編譯完成。反編譯後,工作區顯示包含機器碼的Hex View-1窗口、匯編代碼的IDA View-A窗口以及保存函數名的Function window窗口。通過雙擊函數名定位到對應函數的匯編代碼。使用Ctrl+F搜索特定函數名,雙擊函數名查看匯編代碼,按下F5即可轉換為C代碼。

❷ 怎麼修改android 啟動過程中的第二個開機畫面

第一個開機畫面是在內核啟動的過程中出現的,它是一個靜態的畫面。第二個開機畫面是在init進程啟動的過程中出現的,它也是一個靜態的畫面。第三個開機畫面是在系統服務啟動的過程中出現的,它是一個動態的畫面。無論是哪一個畫面,它們都是在一個稱為幀緩沖區(frame buffer,簡稱fb)的硬體設備上進行渲染的。接下來,我們就分別分析這三個畫面是如何在fb上顯示的。
1. 第一個開機畫面的顯示過程
Android系統的第一個開機畫面其實是Linux內核的啟動畫面。在默認情況下,這個畫面是不會出現的,除非我們在編譯內核的時候,啟用以下兩個編譯選項:
CONFIG_FRAMEBUFFER_CONSOLE
CONFIG_LOGO
第一個編譯選項表示內核支持幀緩沖區控制台,它對應的配置菜單項為:Device Drivers ---> Graphics support ---> Console display driver support ---> Framebuffer Console support。第二個編譯選項表示內核在啟動的過程中,需要顯示LOGO,它對應的配置菜單項為:Device Drivers ---> Graphics support ---> Bootup logo。配置Android內核編譯選項可以參考在Ubuntu上下載、編譯和安裝Android最新內核源代碼(Linux Kernel)一文。
幀緩沖區硬體設備在內核中有一個對應的驅動程序模塊fbmem,它實現在文件kernel/goldfish/drivers/video/fbmem.c中,它的初始化函數如下所示:

/**
* fbmem_init - init frame buffer subsystem
*
* Initialize the frame buffer subsystem.
*
* NOTE: This function is _only_ to be called by drivers/char/mem.c.
*
*/

static int __init
fbmem_init(void)
{
proc_create("fb", 0, NULL, &fb_proc_fops);

if (register_chrdev(FB_MAJOR,"fb",&fb_fops))
printk("unable to get major %d for fb devs\n", FB_MAJOR);

fb_class = class_create(THIS_MODULE, "graphics");
if (IS_ERR(fb_class)) {
printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
fb_class = NULL;
}
return 0;
}
這個函數首先調用函數proc_create在/proc目錄下創建了一個fb文件,接著又調用函數register_chrdev來注冊了一個名稱為fb的字元設備,最後調用函數class_create在/sys/class目錄下創建了一個graphics目錄,用來描述內核的圖形系統。

模塊fbmem除了會執行上述初始化工作之外,還會導出一個函數register_framebuffer:

EXPORT_SYMBOL(register_framebuffer);
這個函數在內核的啟動過程會被調用,以便用來執行注冊幀緩沖區硬體設備的操作,它的實現如下所示:

/**
* register_framebuffer - registers a frame buffer device
* @fb_info: frame buffer info structure
*
* Registers a frame buffer device @fb_info.
*
* Returns negative errno on error, or zero for success.
*
*/

int
register_framebuffer(struct fb_info *fb_info)
{
int i;
struct fb_event event;
......

if (num_registered_fb == FB_MAX)
return -ENXIO;

......

num_registered_fb++;
for (i = 0 ; i < FB_MAX; i++)
if (!registered_fb[i])
break;
fb_info->node = i;
mutex_init(&fb_info->lock);
fb_info->dev = device_create(fb_class, fb_info->device,
MKDEV(FB_MAJOR, i), NULL, "fb%d", i);
if (IS_ERR(fb_info->dev)) {
/* Not fatal */
printk(KERN_WARNING "Unable to create device for framebuffer %d; errno = %ld\n", i, PTR_ERR(fb_info->dev));
fb_info->dev = NULL;
} else
fb_init_device(fb_info);

......

registered_fb[i] = fb_info;

event.info = fb_info;
fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event);
return 0;
}
由於系統中可能會存在多個幀緩沖區硬體設備,因此,fbmem模塊使用一個數組registered_fb保存所有已經注冊了的幀緩沖區硬體設備,其中,每一個幀緩沖區硬體都是使用一個結構體fb_info來描述的。

閱讀全文

與android結構體數組相關的資料

熱點內容
phpsocket發送郵件 瀏覽:635
php漢字分割 瀏覽:492
程序員休息一周 瀏覽:340
順心捷達app下載軟體叫什麼 瀏覽:55
python中pydoc 瀏覽:690
銀行生活app是什麼意思 瀏覽:915
騰訊雲伺服器三個月才能備案 瀏覽:721
視頻網站租什麼伺服器 瀏覽:156
海南免稅溯源碼查詢 瀏覽:642
linux中表示什麼 瀏覽:14
建築加密區長度間隔多少布置一下 瀏覽:661
android電容觸摸屏驅動 瀏覽:359
linux打開firefox命令 瀏覽:453
android結構體數組 瀏覽:699
python多變數輸出格式 瀏覽:564
命令的人群 瀏覽:782
app許可權測試包括什麼 瀏覽:744
錄音保存後在哪個文件夾 瀏覽:1000
香港伺服器的數據怎麼搬到阿里雲 瀏覽:433
伺服器怎麼樣打開 瀏覽:674