編譯生成elf文件
㈠ 為什麼編譯器版本出現在我的ELF可執行文件中
我只知道這些啦,到電子詞典的官方網站上應該有的!
我買了名人6188電子詞典,我看電子詞典里的程序都是*.elf的格式,這是用什麼編程軟體編的阿,在哪裡能找到?
ELF(Executable and Linking Format)是可執行連接格式
可執行連接格式是UNIX系統實驗室(USL)作為應用程序二進制介面
(Application Binary Interface(ABI)而開發和發布的。工具介面標准委
員會(TIS)選擇了正在發展中的ELF標准作為工作在32位INTEL體繫上不同操
作系統之間可移植的二進制文件格式。
用linux的gcc編譯器就可以生成elf文件
㈡ eclipse編譯完了只輸出elf文件沒有hex文件
你先得在工程屬性里配置輸出hex文件,才能在Debug/Release文件夾下找到對應工程名的hex文件
右擊工程名,屬性->C/C++ Build->IAR Linker for ARM->Output Converter->勾選Generate additional output,並在output format下拉框里選擇Intel extended
㈢ 用Keil編譯程序時數據段過長怎麼辦
程序DATA區空間已超過指定單片機的DATA區空間,可以用keil C編譯的時候壓縮。
㈣ elf是什麼格式,怎麼運行
Executable Linkable Format
就是可執行文件。
gcc 編出來的。
http://crquan.blogbus.com/logs/1651240.html
㈤ 如何把shell腳本編程elf文件
Linux ELF ELF = Executable and Linkable Format,可執行連接格式,是UNIX系統實驗室(USL)作為應用程序二進制介面(Application Binary Interface,ABI)而開發和發布的。擴展名為elf。工具介面標准委員會(TIS)選擇了正在發展中的ELF標准作為工作在32位INTEL體繫上不同操作系統之間可移植的二進制文件格式。假定開發者定義了一個二進制介面集合,ELF標准用它來支持流線型的軟體發展。應該減少不同執行介面的數量。因此可以減少重新編程重新編譯的代碼。編輯本段文件格式
㈥ 求從交叉編譯器生成的elf文件中讀取全局變數信息的函數
樓主,這個恐怕不是一個函數能解決的,ELF文件格式還是有點復雜的。 我以前做過類似的功能,從ELF文件中載入所有符號表信息,字元串信息,並下載代碼。 我推薦你用一個開源的庫:ELFIO。 我想這個庫應該可以實現你的功能,只是你要去研究一下它的用法。 當然,你得首先對ELF文件格式有所了解。ELFIO庫下載地址: http://sourceforge.net/projects/elfio/ ================================這是我以前寫過的載入ELF中所有Section信息的例子: BOOL LoadELF(char* pFilename)
{
CString strName,tmp;
IELFI* pReader;
if ( ERR_ELFIO_NO_ERROR != ELFIO::GetInstance()->CreateELFI( &pReader ) ) {
Msg( "Can't create ELF reader.\r\n",2,0);
return FALSE;
}
if ( ERR_ELFIO_NO_ERROR != pReader->Load(pFilename ) ) {
Msg( "Can't open input elf file.\r\n",2,0);
return FALSE;
} int nSecNo = pReader->GetSectionsNum();
for (int i = 0; i < nSecNo; i++ )
{ // For all sections
const IELFISection* pSec = pReader->GetSection( i );
printf("%s\n",pSec->GetName().c_str());
Elf32_Half index= pSec->GetIndex() ;
std::string name = pSec->GetName() ;
Elf32_Word type =pSec->GetType() ;
Elf32_Addr addr = pSec->GetAddress() ;
Elf32_Word size = pSec->GetSize() ;
Elf32_Word link = pSec->GetLink() ;
Elf32_Word info = pSec->GetInfo() ;
Elf32_Word aa = pSec->GetAddrAlign() ;
Elf32_Word esize = pSec->GetEntrySize() ;
const char* p = pSec->GetData() ;
Elf32_Word flag = pSec->GetFlags() ;
strName = pSec->GetName().c_str();strName.MakeUpper();
//如果未指定section,讀取所有SHF_EXECINSTR屬性的Section
if(g_MapScetion.GetCount()==0)
{
if(flag&SHF_EXECINSTR)
LoadElfSection((BYTE*)pSec->GetData(),pSec->GetAddress(),pSec->GetSize(),pList,pAddInfo);
}
else
{
if(g_MapScetion.Lookup(strName,tmp))
LoadElfSection((BYTE*)pSec->GetData(),pSec->GetAddress(),pSec->GetSize(),pList,pAddInfo);
}
pSec->Release();
} pReader->Release();
return TRUE;
}
㈦ 用Keil編譯程序時出現 error C249: 'DATA': SEGMENT TOO LARGE,數據段過長,怎麼解決硬體已焊好!
解決方法如下:(設置Target的屬性參數,具體設置如下)
㈧ ELF文件 編譯時間
具體如下:
ELF文件格式提供了兩種不同的視角,在匯編器和鏈接器看來,ELF文件是由Section Header Table描述的一系列Section的集合,而執行一個ELF文件時,在載入器(Loader)看來它是由Program Header Table描述的一系列Segment的集合。
目標文件再不同的系統或平台上具有不同的命名格式,在Unix和X86-64 Linux上稱為ELF(Executable and Linkable Format, ELF)。
㈨ C語言編譯到機器碼的過程求詳細解說,不勝感激
從編碼到生成可執行的binary文件是有好幾個過程的:(默認已完成編碼)
1, 預編譯(預處理), 也就是替換工作, 先把代碼中的宏做替換, 條件編譯等會做處理,為編譯做作準備;
2,編譯,包括了語法的檢查,匯編代碼等中間代碼的生成,代碼優化,obj文件(也算是目標代碼)的生成,已經是有機器碼了;
3.庫的合成,這個不一定有,不是必須的;
4.鏈接, 連接器會按照一定的規則,比如根據連接腳步,把code組織起來,生成elf文件(elf可能不是一個所有通用的格式),這個時候已經可以執行了,裡面的可以執行的機器碼;
5,裁剪, 可以把elf文件中的非必需的段 strip,生成一個更精簡的elf文件;
6,binary的生成,obj命令可以把elf文件轉換成binary文件,binary文件燒錄到存儲器中可以直擊運行。