📄 coff.c
字号:
#include "coff.h"
#include "hpi.h"
#define TRACE(X)
void load_coff(unsigned long start, unsigned long end)
{
char* data;
long size;
long offset;
int index;
FILEHDR* pHdr;
SECHDR* pSec;
OPTHDR* pOpt;
pHdr = (FILEHDR*)start;
if(pHdr->usOptHdrSZ==0)
offset = sizeof(FILEHDR);
else
offset = sizeof(FILEHDR)+28;
pOpt = (OPTHDR*)(start+sizeof(FILEHDR));
pSec = (SECHDR*)(start+offset);
for( index = 0; index < pHdr->usNumSec; index++)
{
TRACE(("%s flag=0x%x, len = %d, dst = 0x%x\n", pSec -> cName, pSec -> ulFlags, pSec->ulSize, pSec->ulPAddr));
// FLAG == 0x20 | 40 需要加载, 程序和数据段
if(pSec -> ulFlags & 0x60)
{
for( size = 0; size < pSec->ulSize; size++)
{
HPI_WR((pSec->ulPAddr+size), *((unsigned short*)(start+pSec->ulRawdata)+size));
}
}
// FLAG == 0x80, 需要清0
if((pSec -> ulFlags & 0x80) == 0x80)
{
for( size = 0; size < pSec->ulSize; size++)
{
HPI_WR((pSec->ulPAddr+size), 0);
}
}
pSec ++;
}
HPI_WR(0x7F, 0);
HPI_WR(0x7F, (pOpt->ulEntry));
TRACE(("Entry = 0x%x\n", pOpt->ulEntry));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -