Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-12-2005
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 19
fer21unmsm Va por buen camino
Smile Proteger memoria en la cual se cargó una DLL!

Hola a todos los miembros de este foro, mi pregunta es la siguiente:

Al cargar una librería con LoadLibrary y todo lo demás, como le puedo hacer para proteger esa parte de la memoria en la cual está cargada la librería "X", quisiera saber como podría proteger esa parte para que algún programa externo y ajeno a mi applicación no la pueda sobreescribir.

Uso Delphi 7.0 sobre WindowsXP.

Gracias de antemano.

Saludos.
Responder Con Cita
  #2  
Antiguo 28-12-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Windows ya hace esto por vos.

Si otro proceso intenta sobreescribir la memoria, obtendrá un Access Violation. Otra cosa es que el otro proceso cargue la dll, pues compartirá el acceso a esta (y su memoria), de manera que si no está bien programada, podría incurrir en un desbordamiento de memoria. Pero ya esto es cosa de quien ha programado la biblioteca.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 28-12-2005
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 19
fer21unmsm Va por buen camino
Hola jachguate, antes que nada gracias por responder a mi pregunta, es correcto lo que dices, cuando por ejemplo otra aplicación trata de sobreescribir esa parte de la memoria donde esta cargada la DLL, manda un mensaje de Access Violation.....!, pero el problema es ese quisiera saber como puedo evitar que eso pase, es decir impedir que salga ese mensaje o impedir que la otra aplicación haga eso.

Porque se puede dar el caso de que otra aplicación trate de sobreescribir dicha parte de la memoria y salga el tal mensajito pero no creo que al usuario le vaya a gustar.

Otra cosa en el caso de que fuera mi propia aplicación aunque lo dudo, por algunas razones que tengo, pero puedo equivocarme, cuales pueden ser las posibles causas que hagan que esto suceda(por ejemplo puede ser los hilos?), quisiera saber un poco mas de eso.

Saludos.
Responder Con Cita
  #4  
Antiguo 28-12-2005
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
Tal como lo dijo el amigo jachguate... eso lo hace el SO, otras aplicaciones puden "cargar la DLL" pero realmente esa carga la hace el SO y es descargada de memoria cuando ya ninguna aplicación la use despues de su respectiva descarga, asi se evitan las dúplicas. por otro lado...al ser cargada por una aplicación, esta ya pasa a ser abierta en modo compartido pero con denegación de escritura, es decir, no puede ser modificada, solo leida, creo q solo deberías preocuparte por lo q tu aplicación hace con la librería y/o lo q hace la librería cuando tu aplicación la llama
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Responder Con Cita
  #5  
Antiguo 29-12-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por fer21unmsm
Hola jachguate, antes que nada gracias por responder a mi pregunta, es correcto lo que dices, cuando por ejemplo otra aplicación trata de sobreescribir esa parte de la memoria donde esta cargada la DLL, manda un mensaje de Access Violation.....!, pero el problema es ese quisiera saber como puedo evitar que eso pase, es decir impedir que salga ese mensaje o impedir que la otra aplicación haga eso.
Para impedir que otra aplicación intente escribir una dirección específica de la memoria, hablá directamente con su programador y pedile que no lo haga..
Es evidente, para mi, que eso es imposible, sobre todo si se trata de una aplicación como Word o Excel.

Cita:
Empezado por fer21unmsm
Porque se puede dar el caso de que otra aplicación trate de sobreescribir dicha parte de la memoria y salga el tal mensajito pero no creo que al usuario le vaya a gustar.
El impedir que salga el mensaje (o permitirlo) igualmente es responsabilidad del programador de la aplicación y no algo por lo que vos debas preocuparte.

Cita:
Empezado por fer21unmsm
Otra cosa en el caso de que fuera mi propia aplicación aunque lo dudo, por algunas razones que tengo, pero puedo equivocarme, cuales pueden ser las posibles causas que hagan que esto suceda(por ejemplo puede ser los hilos?), quisiera saber un poco mas de eso.
Una forma de que esto suceda, "a la fuerza", es hacer que un puntero te dirija a esa dirección de memoria y escribir algo en ella. Accidentalmente puede pasar si usas un puntero para un objeto que fue destruido antes de que la dll llegase a la memoria y que esta casualmente cayera en la dirección a donde se apuntaba... cosa poco probable. La solución: hacer un manejo limpio de los punteros, haciendo que estos apunten a nil cada vez que se destruyan los objetos a donde apuntan o se libere la memoria que fue reservada para ellos. En otras palabras, órden al programar.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 29-12-2005
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 19
fer21unmsm Va por buen camino
Gracias a todos ustedes por la respuesta.

Saludos.
Responder Con Cita
  #7  
Antiguo 29-12-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Estoy *casi* seguro que SI se puede.

1- .NET lo hace usando el CAS (code acces security)

2- Puedes usar archivos mapeados en memoria, los que se les pueden asignar permisos de seguridad

3- Si programas la DLL como un componente COM+, lo instalas en el COM+ Manager y SE LE PUEDE DECLARAR LA SEGURIDAD. Por ejemplo, puedes especificar como es el acceso de los metodos, el usuario que puede cargar la DLL, etc... Es completo, y de las tres, la mas facil de hacer.
__________________
El malabarista.
Responder Con Cita
  #8  
Antiguo 29-12-2005
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 19
fer21unmsm Va por buen camino
Cita:
Empezado por mamcx
Estoy *casi* seguro que SI se puede.

1- .NET lo hace usando el CAS (code acces security)

2- Puedes usar archivos mapeados en memoria, los que se les pueden asignar permisos de seguridad

3- Si programas la DLL como un componente COM+, lo instalas en el COM+ Manager y SE LE PUEDE DECLARAR LA SEGURIDAD. Por ejemplo, puedes especificar como es el acceso de los metodos, el usuario que puede cargar la DLL, etc... Es completo, y de las tres, la mas facil de hacer.
Hola mamcx, gracias por responder, he entendido tu respuesta, pero quisiera saber como puedo instalarlo en el COM+ Manager mediante un programa en delphi, como es que podría accesar e instalarlo, ¿tendría que usar una API?.

Uso delphi 7.0
WindowsXP

Gracias de antemano
Saludos.
Responder Con Cita
  #9  
Antiguo 29-12-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Para eso debes crear un componente Activex (por la paleta de Nuevo proyecto de delphi)

Alli defines los metodos y propiedades de la DLL. Una vez que termines, compilas la DLL y abres el COM+ desde Panel de control, herramientas administrativas.

Luego creas un nuevo paquete desde alli y luego insertas tu componente COM+ (o sea la dll). Aunque algunos pasos de configuracion de seguridad varian entre las versiones de sistema operativo el proceso en si es intuitivo y existe buena documentacion al respecto...
__________________
El malabarista.
Responder Con Cita
  #10  
Antiguo 30-12-2005
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 19
fer21unmsm Va por buen camino
Cita:
Empezado por mamcx
Para eso debes crear un componente Activex (por la paleta de Nuevo proyecto de delphi)

Alli defines los metodos y propiedades de la DLL. Una vez que termines, compilas la DLL y abres el COM+ desde Panel de control, herramientas administrativas.

Luego creas un nuevo paquete desde alli y luego insertas tu componente COM+ (o sea la dll). Aunque algunos pasos de configuracion de seguridad varian entre las versiones de sistema operativo el proceso en si es intuitivo y existe buena documentacion al respecto...
Ok Mamcx ya tengo la dll y ya lo instalé, gracias por tu tiempo dedicado a responder esta pregunta.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:10:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi