2017-01-16 98 views
1

是否可以在不損害代碼功能和文件格式的情況下更改ELF字節順序?將Big Endian ELF可執行文件轉換爲Little Endian字節序?

我的目標是在Little Endian機器上運行Big Endian ARM可執行文件。

如果它不只是交換字節(由於頭和更多我猜),所需的步驟是什麼?

+0

太模糊了,有兩種手臂大端模式,有可能假設你有正確的核心,更重要的是芯片/外圍設備。在加載和運行這個二進制文件之前,您可能需要切換endian模式,但這也取決於您的環境是裸機還是操作系統。裸機有一個非常渺茫的機會,否則不太可能。 –

+0

be-32舊的方式32位的東西沒有交換,字節和半字是。因此,您必須知道二進制文件的哪些部分(以逐字爲單位)作爲字訪問,並交換其他所有內容。 be-8字節訪問不會改變,但是字和半字數據訪問是做的,指令不是,所以你將不得不隔離訪問的二進制字節作爲數據字或者半字並且交換它們。簡短的回答,交換不會奏效。必須將處理器切換到正確的模式,假設您處於二進制工作的芯片上(外設等) –

回答

2

否。字節順序不僅僅是文件格式,而是代碼中使用的ABI,無論是機器指令還是數據結構。在這一點上,ARM BE/LE與x86和ARM之間的差異是相同的,並且不能「翻譯」。

+0

您能否指出一些特殊差異? – Reflection

+0

代碼本身可能使用字節數(例如,讀取4字節int的第一個字節並假定它是低字節)。即使您正確地翻譯了說明,您也會打破幾乎所有的程序。 – BitBank

+0

確實。同樣,由於ELF不會對您訪問的數據結構的語義進行編碼,因此翻譯軟件不可能知道您訪問的結構的哪些部分,並且結構中字段的順序可能是字節序定義的。 –