Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-04-2008
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Poder: 18
rolandoj Va por buen camino
Question Error ejecutando una rutina inyectada a un proceso remoto

Hola,

Estoy teniendo problemas al ejecutar una rutina inyectada en un proceso remoto. Funcionalmente, la rutina se ejecuta perfectamente; pero, bien al momento de regresar, o al momento de limpiarse la memoria alocada para ella, el proceso remoto indica que ha generado errores y que se cerrará.

Dado que este es un tipo de programación particularmente complicada, por simplicidad diré que conceptualmente, y en forma muy resumida, la situación es la siguiente:

1. Tenemos desarrollada una rutina que debe ejecutarse en una aplicación distinta a aquella en la que la hemos escrito.

2, Para ello es necesario copiar, el código de la rutina en sí y la estructura de los datos a pasarle como parámetros, desde nuestro espacio de direcciones al espacio de direcciones del proceso remoto, lo que implica reservar memoria en el proceso remoto para copiarle esa información

3. La rutina debe ejcutarse con CreateRemoteThread

4. La memoria reservada en el proceso remoto debe liberarse con VirtualFreeEx. VirtualFreeEx no reporta errores, por lo que aparentemente esa parte está bien; pero no estoy 100% seguro

Básicamente, la rutina a ejecutarse remotamente debe tener la forma:

function NombreDeFuncion(dwEntryPoint: Pointer): longword; stdcall;

El parámetro dwEntryPoint debe ser un apuntador a la estructura de datos pasados a la rutina desde el proceso que llama, y entre otras cosas contiene apuntadores a las rutinas de User32 y Kernel32 que pudieran necesitarse.

Cuando la rutina termina es donde empiezan mis principales dudas. He visto ejemplos donde no se hace nada especial, otros donde se llama a ExitThread y otros llamando a ExitProcess: pero ninguna combinación ha funcionado.

Además, ni para ExitThread ni para ExitProcess he encontrado una explicación clara de cual debe ser el valor de ExitCode que se les pase.

Agradecería si alguién pudiera aclarar conceptualmente las condiciones que deben cumplir ese tipo de rutinas para ser terminadas y para limpiar la memoria alocada para ellas.
Responder Con Cita
 



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ayuda ejecutando un proceso como "SYSTEM" y haciendo que no se pueda terminar lostprophets Varios 2 05-02-2008 02:28:50
ayuda "Detectando un proceso y ejecutando otro" lostprophets Varios 1 29-01-2008 23:54:03
Error de conexion a servidor Remoto con Firebird Gaim2205 Firebird e Interbase 5 18-09-2007 21:33:00
Error al conectar la base de datos en modo Remoto oscjae Firebird e Interbase 2 26-01-2006 11:19:33
Error de memoria con proceso de Data Pump burasu Conexión con bases de datos 4 22-11-2005 11:14:22


La franja horaria es GMT +2. Ahora son las 04:11:03.


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