Modulos, ficheros, Interrups y mas.

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06

Responder
Avatar de Usuario
Darthvader38
Enteradillo
Enteradillo
Mensajes: 67
Registrado: 24 Ene 2010, 06:39

Modulos, ficheros, Interrups y mas.

Mensaje por Darthvader38 »

Hola a todos!!! :D
He estado rastreando en la web y parece un poco "turbio" encontrar indicaciones sobre una funcion que retorne la
direccion de un modulo que se este ejecutando...
Puede alguien responder a esto:(Las ire enumerando a ver si asi mismo correspondiente con el # de la pregunta me dan la respuesta)

Preguntas:

1-Hay alguna funcion que retorne la direccion del modulo especificado y que se este ejecutando?

2- Conocen que informacion me brinda la estructura devuelta por la funcion "sceKernelModuleInfo" o de nombre
parecido?Es decir en el "doc" del SDK sale el nombre de todos los miembros que integran la estructura devuelta por esta funcion antes mencionada "sceKernelModuleInfo", pero no se con detalle a que se refiere cada uno de los miembros que brinda dicho struct?Por ejemplo el miembro: entry_addr <---que es lo que guarda?

Talvez se me dificulta porque no estoy muy ducho en el ingles....pero aun asi estoy interesado en saber que informacion me puede brindar esta struct tantas veces mencionada....para asi tener en cuenta y explotar mas la informacion que me pueda dar....

3-Como puedo saber si un fichero x esta siendo usado?

4-Quiero hacer un homebrew que dumpee la memoria RAM en el area Kernel, pero siempre
he tenido la duda de que si puedo usar la funcion que detiene las interrupciones para evitar algun cambio en la memoria
mientras es dumpeada y poder obtenerla como esta en ese momento del dumpeo.Detener Interrup's me puede servir para esto? O talvez hay otro procedimiento que conozcan para lograr lo que he explicado anteriormente.

5-Como puedo obtener la capacidad de la "Memory Stick"? hay alguna funcion para esto?
o talvez es accediendo al sistema de archivos y leer los datos de la raiz?Quisiera saber si puedo acceder
a mas detales sobre la MS que tengo insertada en la PSP....como por ejemplo la capacidad total;Id de produccion y mas cosas.....Hay alguna funcion que se encargue de obtener estos detalles? Porque el sistema por si solo accede
a parte de esta informacion...por ejemplo cuando presionamos Triangulo sobre la memoria y pedimos informacion
sobre esta.La ultima vez M0skit0 me apunto a un lugar donde se suponia que pudiera solucionar estas dudas....
pero puede ser que por mi ignorancia no viera la respuesta que estaba delante de mis narices...Tiene alguien algun
metodo que pueda describir para acceder a esta informacion.

6-Soy novato en el PSPLINK pero aun asi he sabido darle mi uso y le he sacado provecho realmente con lo que se hacer en este grandioso soft....pero tengo una dificultad.....a la de dumpear la RAM a un fichero mediante
el comando "savemem" no se como señalar la direccion inicial desde donde deseo dumpear....
Por ejemplo y la intento usar asi y no sucede nada....:

savemem 0x01 0x100 fichero.x

Que estoy haciendo mal? A mi idea iba a dumpear desde la direccion 1 a la 256....por que no lo hace?

Sin embargo asi si me sirve-> savemem @PSPLINK@ 0x100 fichero.x

Porfa que alguien explique.... :(
M0skit0 quiza?

Saludos a todos!!!! :D

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: Modulos, ficheros, Interrups y mas.

Mensaje por m0skit0 »

Darthvader38 escribió:1-Hay alguna funcion que retorne la direccion del modulo especificado y que se este ejecutando?

Con que esté cargado vale, no hace falta que se esté ejecutando. Todo depende de lo que sepas del módulo. Si sabes cuál es su UID, usas sceKernelQueryModuleInfo(). Si sólo sabes el nombre, tendrás que hacer primero un sceKernelGetModuleIdList() y por cada UID devuelto hacer un sceKernelQueryModuleInfo() y comparar los nombres.

Darthvader38 escribió:2- Conocen que informacion me brinda la estructura devuelta por la funcion "sceKernelModuleInfo" o de nombre
parecido?Es decir en el "doc" del SDK sale el nombre de todos los miembros que integran la estructura devuelta por esta funcion antes mencionada "sceKernelModuleInfo", pero no se con detalle a que se refiere cada uno de los miembros que brinda dicho struct?Por ejemplo el miembro: entry_addr <---que es lo que guarda?

Te refieres a SceKernelModuleInfo. En realidad con saber un poco de la estructura de los ELF, los nombres son explicativos por sí mismos (en realidad si no sabes a ué se refiere el nombre, realmente no necesitas esa información para nada).

Código: Seleccionar todo

typedef struct SceKernelModuleInfo {
         SceSize         size; //Tamaño del módulo
         char            nsegment; //Número de segmentos
         char            reserved[3];
         int             segmentaddr[4]; //Direcciones de cada uno de los segementos
         int             segmentsize[4]; //Tamaño de cada segmento
         unsigned int    entry_addr; //Dirección de entrada del código (module_start)
         unsigned int    gp_value; //Valor para el registro GP
         unsigned int    text_addr; //Dirección de la sección código
         unsigned int    text_size; //Tamaño de la sección código
         unsigned int    data_size; //Tamaño de la sección datos fijos
         unsigned int    bss_size; //Tamaño de la sección de datos sin inicializar
         /* The following is only available in the v1.5 firmware and above,
            but as sceKernelQueryModuleInfo is broken in v1.0 is doesn't matter ;) */
         unsigned short  attribute; //Atributos del módulo
         unsigned char   version[2]; //Versión del módulo
         char            name[28]; //Nombre del módulo
} SceKernelModuleInfo;


Darthvader38 escribió:3-Como puedo saber si un fichero x esta siendo usado?

Tienes varias opciones. Puedes enganchar la función sceIoOpen() y así llevar cuenta de todos los ficheros que se van abriendo. También puedes comprobar la tabla de descriptores de fichero del kernel (ignoro dónde se halla, pero sería cuestión de buscarla).

Darthvader38 escribió:4-Quiero hacer un homebrew que dumpee la memoria RAM en el area Kernel, pero siempre
he tenido la duda de que si puedo usar la funcion que detiene las interrupciones para evitar algun cambio en la memoria
mientras es dumpeada y poder obtenerla como esta en ese momento del dumpeo.Detener Interrup's me puede servir para esto? O talvez hay otro procedimiento que conozcan para lograr lo que he explicado anteriormente.

Para volcar la memoria kernel, necesitas tener privilegios kernel (es decir, ejecutarse en modo kernel). Y sí, lo que dices de las interrupciones es totalmente válido, pero en teoría sceIoWrite/sceIoRead son bloqueantes, es decir, mientras se están ejecutando no se ejecuta nada más (pero también están las versiones Async, que no son bloqueantes).

Darthvader38 escribió:5-Como puedo obtener la capacidad de la "Memory Stick"? hay alguna funcion para esto?
o talvez es accediendo al sistema de archivos y leer los datos de la raiz?Quisiera saber si puedo acceder
a mas detales sobre la MS que tengo insertada en la PSP....como por ejemplo la capacidad total;Id de produccion y mas cosas.....Hay alguna funcion que se encargue de obtener estos detalles?

La verdad no tengo información sobre ello, pero puedo adivinar que todo eso lo puedes hacer con sceIoDevctl(), pero no me preguntes cómo :lol:

Darthvader38 escribió:por ejemplo cuando presionamos Triangulo sobre la memoria y pedimos informacion sobre esta

Puedes reversar esa fución y ver cómo lo hace.

Darthvader38 escribió:6-Soy novato en el PSPLINK pero aun asi he sabido darle mi uso y le he sacado provecho realmente con lo que se hacer en este grandioso soft....pero tengo una dificultad.....a la de dumpear la RAM a un fichero mediante
el comando "savemem" no se como señalar la direccion inicial desde donde deseo dumpear....
Por ejemplo y la intento usar asi y no sucede nada....:

savemem 0x01 0x100 fichero.x

Que estoy haciendo mal? A mi idea iba a dumpear desde la direccion 1 a la 256....por que no lo hace?

Sin embargo asi si me sirve-> savemem @PSPLINK@ 0x100 fichero.x

Porque no existe la dirección 1. Te dejo un mini-mapa de direcciones de la PSP:

0x00010000 - 0x00014000 -> scratchpad - 16 KiB (no se usa)
0x04000000 - 0x04400000 -> VRAM - 4 MiB (memoria vídeo, lo que aquí se escriba aparece en pantalla)
0x08800000 - 0x09FFFFFF -> memoria de usuario principal - 24 MiB (donde se cargan los homebrews, los juegos, el VSH, etc...)
0x0A000000 - yanomeacuerdo xD -> memoria extendida - 32 MiB (no se puede acceder normalmente, el psplink no la reconoce a menos que se lo parchee)
0x88000000 palante -> memoria kernel (8 MiB)
0xBFC00000 palante -> registros hardware (control directo del hardware)

No te fíes mucho de mi memoria, la mayoría de esta información la obtienes exacta haciendo meminfo en psplink ;)
Imagen

Avatar de Usuario
Darthvader38
Enteradillo
Enteradillo
Mensajes: 67
Registrado: 24 Ene 2010, 06:39

Re: Modulos, ficheros, Interrups y mas.

Mensaje por Darthvader38 »

M0skit0 me he demorado unos dias en poder ver la respuesta ya que tuve problemas con mi proveedor de la cuenta de Internet .....pero MUCHAS gracias por este mundo de informacion!!!!! :oki:
ahora empesare a examinar :geek: y lo mas posible es que aprezca de nuevo...con dudas que me surjan por el camino.. :oki:
Mucho saludos M0skit0 gracias por tu tiempo y paciencia!!! :oki: :oki: :oki:


Ahora a trabajar que estoy de vuelta!!! :canuto:

Saludos a toda la scene!!!!!!! :D

Avatar de Usuario
Alek
ViP Hordes
ViP Hordes
Mensajes: 89
Registrado: 19 May 2010, 19:16
PSN ID: PlayAlek
Contactar:

Re: Modulos, ficheros, Interrups y mas.

Mensaje por Alek »

Darthvader38 escribió:5-Como puedo obtener la capacidad de la "Memory Stick"? hay alguna funcion para esto?
o talvez es accediendo al sistema de archivos y leer los datos de la raiz?Quisiera saber si puedo acceder
a mas detales sobre la MS que tengo insertada en la PSP....como por ejemplo la capacidad total;Id de produccion y mas cosas.....Hay alguna funcion que se encargue de obtener estos detalles? Porque el sistema por si solo accede
a parte de esta informacion...por ejemplo cuando presionamos Triangulo sobre la memoria y pedimos informacion
sobre esta.La ultima vez M0skit0 me apunto a un lugar donde se suponia que pudiera solucionar estas dudas....
pero puede ser que por mi ignorancia no viera la respuesta que estaba delante de mis narices...Tiene alguien algun
metodo que pueda describir para acceder a esta informacion.

Código: Seleccionar todo

unsigned int buf[5]; 
unsigned int *pbuf = buf;
sceIoDevctl("ms0:", 0x02425818, &pbuf, sizeof(pbuf), 0, 0);


buf[0]*buf[3]*buf[4] es el espacio total, buf[1]*buf[3]*buf[4] es el espacio libre.

Del manual,

Código: Seleccionar todo

int sceIoDevctl(const char *dev, unsigned int cmd, void *indata, int inlen, void *outdata, int outlen);
/* Permite emitir y recibir comandos de y hacia los dispositivos.
@parámetro *dev – Dispositivo al que se va a mandar o recibir.
@parámetro cmd – Comando a enviar
@parámetro *indata – Bloque de datos a enviar, en otro caso es nulo (NULL)
@parámetro inlen – Longitud de indata, si es nulo, será 0.
@parámetro *outdata – Bloque de datos a recibir, en otro caso será nulo (NULL)
@parámetro outlen – Longitud de outdata, si es nulo, será 0.
Ejemplo: int *buffer;
sceIoDevctl(“ms0:”, 0x02425818,&buffer, sizeof(buffer),0,0); */


En cuanto al tema del ID de producción y demás, al menos con Devctl no sé bien cómo podrías conseguirlo a priori.

Darthvader38 escribió:4-Quiero hacer un homebrew que dumpee la memoria RAM en el area Kernel, pero siempre
he tenido la duda de que si puedo usar la funcion que detiene las interrupciones para evitar algun cambio en la memoria
mientras es dumpeada y poder obtenerla como esta en ese momento del dumpeo.Detener Interrup's me puede servir para esto? O talvez hay otro procedimiento que conozcan para lograr lo que he explicado anteriormente.


De por sí y como te comenta m0skit0, no habría ningún problema, siempre y cuando no trastees demasiado con los malloc(); no debería de provocar un dump erróneo.

Si no me equivoco, cwcheat tenía una opción parecida para dumpear la memoria RAM en uso, dentro de las opciones principales del programa; quizás puedas ir por ahí.

A su vez, psplinkusb tenía una opción llamada...

Código: Seleccionar todo

host0:/> help savemem
Command: savemem
Synonym: sm
Usage: savemem addr size path
Save memory to a file

que ya te ha explicado grosso modo m0skit0. (Me ha encantado ese p'alante, ni la explicación de un doctorado) Si alguien está interesado analizaré cada opción del psplinkusb y lo añadiré al manual-biblia.

A su vez, y para terminar el tema, quizás te interese echar un ojo al Kernel Memory Dumper de TyRaNiD que puedes encontrar aquí :chapao:
:katana:
<MrTuto_Alek> todos vosotros, hermanos, a mi lado siempre tendreis un trozo de carne para llevaros a la boca :)

Responder