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.
Las funciones be16, be32 y be64 estan aqui:
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.
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.
Código (c) [Seleccionar]
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:
Código (c) [Seleccionar]
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.