>> #define Sub void
>> #define Function void*
>> #define Integer int
Código que carrega os dados do arquivo
pPos é a posição do setor onde está o arquivo
Sub iso9660_LoadFile(Integer pPos, char * MemoryLocal)
{
int edi;
char * buf = (char *)malloc(2048);
Integer conta=0,setores = 0,setor=0;
Integer end_of_file_Sector = pPos + ((Integer)(temp_Size_Lenght / 2048));
//!printf("\n [%d -- %d] \n",Pos,end_of_file_Sector);
setor = pPos; //obterSetDsc(setor);
do{
ide_read_sectors((CurrentUND-1),1,setor++,edi);
buf = (char *)edi;
for (conta = 0; conta < 2048; conta++)
{
MemoryLocal[(setores * 2048) + conta] = buf[conta];
}
setores++;
if (setor >= end_of_file_Sector) break;
} while(1);
//!free((unsigned)buf);
}
Aqui o problema!
Integer iso9660_TESTE_RunnFile(PathDescritor *FileName)
{
Integer Pos = iso9660_FindSector(FileName);
if(Pos==0)
{
printf("Aplicacao nao Encontrada\n");
return 0;
}
char * buffMemory =(char *)2000;
iso9660_LoadFile(Pos,buffMemory);
disableSIS();
uint32_t eip=2000;
asm volatile(" \
mov %0, %%ecx; \
sti; \
jmp *%%ecx "
: : "r"(eip));
enableSIS();
return 1;
}
o buffMemory consegue carregar o arquivo, o eip recebe uma determinada posição de memoria, nos meus testes o buffMemory consegue abrir um arquivo do tipo texto normal, exibindo os bytes e convertendo em string, mas no caso de um aquivo binario executavel eu tentei enviar executar desta posilção "2000" mas não vai. Já tentei paginação mas não funcionou.
No SOmBras vi que usam arquivos no formato ELF, para o meu problema seria mais fácil de resolver?