2015-07-22 59 views
2

正如標題所示,我想拆解elf文件,但是我遇到了一個問題,我不知道哪個指令是arm指令,哪個指令是thumb指令。由於arm指令爲32位,而Thumb指令爲16位,因此拆卸方式不同。那麼如何從十六進制指令中檢測到拇指指令呢?如何在精靈文件中區分手臂指令的拇指指令?

+0

位,而不是字節。 – unixsmurf

+0

[爲Thumb或Arm編譯的ARM ELF的腳本/工具謂詞]的可能重複(http://stackoverflow.com/questions/15913964/script-tool-predicate-for-arm-elf-compiled-for-thumb-or -臂)。正如在這個問題中,有人可以總是想出一些在兩種模式下運行的病理代碼。任何遵循EABI並使用標準編譯器的東西都可以很容易地確定。我只是在兩方面進行反彙編,幾分鐘後,很容易看出哪個是正確的。此外,作者的意圖和[ROP exploitablity](https://en.wikipedia.org/wiki/Return-oriented_programming)是不同的。 –

+0

是否由OS託管?它是一些啓動加載程序代碼?你是否在逆向工程,製造工具等方面提出問題的方式太過籠統,無法給出有意義的答案。但是,**可能的**重複適用於Linux ELF文件(也可能是BSD/Apple)。如果你想要利用漏洞,原始代碼的意圖不重要。如果你想知道代碼在做什麼,那麼這是不同的問題。 –

回答

2

在一個ELF文件中,實際上有一個簡單的方法 - 查看符號表中的函數地址。與互通分支的目標地址非常類似,符號地址的最低位指示相關指令集 - 清除ARM功能,並設置爲Thumb功能(請參閱章節4.5.3的the ARM ELF ABI)。