Hola a todos!!!
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!!!!
Modulos, ficheros, Interrups y mas.
Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06
- Darthvader38
- Enteradillo
- Mensajes: 67
- Registrado: 24 Ene 2010, 06:39
Re: Modulos, ficheros, Interrups y mas.
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
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
- Darthvader38
- Enteradillo
- Mensajes: 67
- Registrado: 24 Ene 2010, 06:39
Re: Modulos, ficheros, Interrups y mas.
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!!!!!
ahora empesare a examinar y lo mas posible es que aprezca de nuevo...con dudas que me surjan por el camino..
Mucho saludos M0skit0 gracias por tu tiempo y paciencia!!!
Ahora a trabajar que estoy de vuelta!!!
Saludos a toda la scene!!!!!!!
ahora empesare a examinar y lo mas posible es que aprezca de nuevo...con dudas que me surjan por el camino..
Mucho saludos M0skit0 gracias por tu tiempo y paciencia!!!
Ahora a trabajar que estoy de vuelta!!!
Saludos a toda la scene!!!!!!!
Re: Modulos, ficheros, Interrups y mas.
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í
<MrTuto_Alek> todos vosotros, hermanos, a mi lado siempre tendreis un trozo de carne para llevaros a la boca