rodrigoduran
(usa Debian)
Enviado em 30/01/2009 - 14:30h
Sim , a lib fui eu quem criou, tenho acesso total ao código dela :) o problema não é a lib em si mas parece que ao chamar a função de carregar a lib ela gera um estouro de memória que corrompe os dados. Eu fiz os testes e executei exatamente o mesmo código sem a linha de codigo do dlopen e fica tudo certo, ao executar o dlopen a memória é corrompida. Algo me diz que é esse ponteiro do tipo void...
//codigo
while(!exec_queue.empty()) //percorre um vetor
{
tmp = &lp->list_macro.back(); //puxa os dados
addr = lp->point_device->addr;
dll = search_device(addr); //retorna o caminho para a lib
void *dllmanager = dlopen(dll,RTLD_LAZY);
if (dllmanager == NULL)
{
fprintf(stderr,"Error: load of dynamic .so failed : %s\n",dlerror());
exit(1);
}
check_events = (unsigned char *(*)(device *,unsigned char*,int)) dlsym(dllmanager,"check_events"); //Funcao a ser executada
if ((error = dlerror()) != NULL )
{
fprintf(stderr,"Error loading dynamic function: %s\n",dlerror());
}
tmp_device = lp->point_device;
rsp = check_events(tmp_device,tmp->command,tmp->size);
dlclose(dllmanager);
//Problema !! Aqui tmp->command está corrompido!!
bytes = write(serialfd,tmp->command,tmp->size);
lp->list_macro.pop_back();