Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - 0xDani

#1041
Ah pues el problema ha resultado estar en dlopen(). dlerror() me dice que no pudo abrir la libreria dinamica. Es raro, porque la tengo en el mismo directorio. Voy a probar a ponerle la ruta completa.

Saludos.

Edit: No la abre ni con la ruta completa.
Edit2: Despues de dlopen(), llamo a dlerror() y me da el error: "libejemplo.so: cannot open shared object file: No such file or directory". He puesto la libreria dinamica en el mismo directorio que el programa, y tambien le he puesto la ruta completa, pero me sigue saltando el mismo error.
#1042
No, estaba usando gcc, pero ahora con g++ ha compilado. Ahora produce violacion de segmento xD.

Saludos.
#1043
Gracias por la respuesta, pero ya casi lo tengo solucionado, ahora lo unico que me falla es que no linkea con la libreria. Eso si, he desistido de pasarle parametros. Dejo el codigo por si a alguien le sirve, deberia funcionar.

Código (cpp) [Seleccionar]
#include <iostream>
#include <dlfcn.h>

using std::cout;

int main()
{
    typedef void (*function)();
    function result;
    void* handle = dlopen("libprueba-plugin2.so", RTLD_LAZY);
    result = (function)dlsym(handle, "Hello");
    (*result)();
    dlclose(handle);
    return 0;
}


Saludos.

Edit: No puedo compilar este programa, el compilador me lanza 'undefined reference to dlopen()' y lo mismo para las otras funciones de dlfcn.h. He probado a poner -ldl, pero el compilador me da estos errores:
In function `__static_initialization_and_destruction_0(int, int)':
main.cpp:(.text+0x6f): undefined reference to `std::ios_base::Init::Init()'
main.cpp:(.text+0x74): undefined reference to `std::ios_base::Init::~Init()'
collect2: ld devolvió el estado de salida 1
#1044
Programación C/C++ / Problema con dlfcn.h.
7 Agosto 2012, 20:37 PM
Bueno estoy intentando usar funciones de librerias dinamicas sin hacer un include, y he encontrado un ejemplo en el que se consigue esto en una pagina de documentacion de dlfcn.h(pubs.opengroup.org/onlinepubs/7908799/xsh/dlsym.html). El problema es que he intentado hacer algo similar con una funcion que recibe dos enteros y retorna su suma y no me termina de salir.
Aqui esta el codigo:
#include <iostream>
#include <dlfcn.h>

using std::cout;

int main()
{
    int a=2, b=3;
    int fptr(int, int);
    void* handle = dlopen("libprueba.so", RTLD_LAZY);
    fptr = (int(int, int))dlsym(handle, "SampleAddInt");
    int c = fptr(a, b);
    cout << c;
    dlclose(handle);
    return 0;
}

Este es el contenido de libprueba.so:
int SampleAddInt(int i1, int i2)
    {
        return i1 + i2;
    }

Y el error que me da el compilador es cuando le intento asignar a fptr el resultado de dlsym, me dice conversion invalida al tipo de funcion 'int(int, int)'.
¿Como lo puedo solucionar? Debe de haber alguna manera de realizar la conversion.

Saludos.
#1045
Absolutamente genial tu explicacion!! Lo he entedido mucho mejor que antes. El mayor problema que tenia es que no he encontrado nada de informacion sobre el operador |=. Tambien decir que los nombres de esas 3 funciones no eran muy descriptivos, y eso termino de confundirme. Bueno, voy a leer el articulo sobre el formato ELF, y a ver si me entero yo solo de lo que es el "endianess".
Y sobre la explicacion te agradezco mucho el esfuerzo de hacerla tan completa(y digerible :xD).

Saludos.
#1046
Programación C/C++ / Ayuda con este codigo.
6 Agosto 2012, 14:54 PM
Bueno estoy leyendo un codigo que un usuario posteo hace poco y que decia que era un jailbreak de la ps3 o algo asi. Bueno el caso es que hay algunas partes del codigo que no llego a entender. Las dejo aqui por si alguien me puede ayudar.

Antes de poner codigo, aclaro que u8 es un typedef de char, u16 de unsigned short, u32 de unsigned int y u64 de unsigned long long.

La primera:
Aqui aparece la estuctura elf_hdr, no la pongo para no ocupar mas espacio.
int elf_read_hdr(u8 *hdr, struct elf_hdr *h)
{
int arch64;
memcpy(h->e_ident, hdr, 16);
hdr += 16;

arch64 = h->e_ident[4] == 2;

h->e_type = be16(hdr);
hdr += 2;
h->e_machine = be16(hdr);
hdr += 2;
h->e_version = be32(hdr);
hdr += 4;

if (arch64) {
h->e_entry = be64(hdr);
h->e_phoff = be64(hdr + 8);
h->e_shoff = be64(hdr + 16);
hdr += 24;
} else {
h->e_entry = be32(hdr);
h->e_phoff = be32(hdr + 4);
h->e_shoff = be32(hdr + 8);
hdr += 12;
}

h->e_flags = be32(hdr);
hdr += 4;

h->e_ehsize = be16(hdr);
hdr += 2;
h->e_phentsize = be16(hdr);
hdr += 2;
h->e_phnum = be16(hdr);
hdr += 2;
h->e_shentsize = be16(hdr);
hdr += 2;
h->e_shnum = be16(hdr);
hdr += 2;
h->e_shtrndx = be16(hdr);

return arch64;
}


Las funciones be16, be32 y be64 estan aqui:
static inline u16 be16(u8 *p)
{
u16 a;

a  = p[0] << 8;
a |= p[1];

return a;
}

static inline u32 be32(u8 *p)
{
u32 a;

a  = p[0] << 24;
a |= p[1] << 16;
a |= p[2] <<  8;
a |= p[3] <<  0;

return a;
}

static inline u64 be64(u8 *p)
{
u32 a, b;

a = be32(p);
b = be32(p + 4);

return ((u64)a<<32) | b;
}


En realidad lo que menos entiendo son las funciones be16, be32 y be64. Y por si alguien va a decirme que no espere que me hagan la tarea, tambien aclaro que esto solo es una parte de un codigo mucho mas grande(foro.elhacker.net/dudas_generales/iquestalguien_me_podria_hacer_el_gran_favor_de_pasar_esto_a_exe-
t368531.0.html).

Saludos.
#1047
 :o :o :o :o :o :o :o
Muy bien, hoy mismo ha habido otra noticia de unas gafas de realidad virtual que funcionaban en linux. Cuando me cambie a linux, decia que la unica ventaja que tenian los SO de microsoft sobre los basados en linux, era en lo referente a videojuegos. Parece que esto esta a punto de cambiar, menos mal, ya estoy harto de microsoft.

Saludos.
#1048
La ley permite que el empresario se quede con la plusvalia, pero os olvidais de que el empresario es el que crea la empresa con su dinero, asumiendo el riesgo de perderlo si la empresa no obtiene beneficios. Por eso me parece exagerado hablar de explotacion. Si una empresa se hunde al primer mes de set creada, el empresario pierde su dinero, en cambio si la consigue hacer crecer entonces obtendra el beneficio de la plusvalia. Es lo que pienso, quiza el sistema no sea perfecto, pero no creo que los trabajadores sean explotados.

Saludos.
#1049
No se si tendra mucho que ver, pero a la funcion SDL_Init le pasas dos veces SDL_INIT_AUDIO.

Saludos.
#1050
Programación C/C++ / Re: Open Gl en C++
1 Agosto 2012, 14:33 PM
No he mirado mucho el codigo, pero esto es C++? Que yo sepa, elif no existe en C++, salvo como instruccion para el preprocesador. En vez de eso puedes usar else if o switch.

Saludos.

PD: He mirado un poco mas el codigo y he visto que usas una sintaxis como la de python, y funciones de python, deberias mirarte un manual de C++. En serio, primero aprende C++ y luego podras crear graficos.