Delphi - llamar a un array

   
Vista:

llamar a un array

Publicado por Teh (8 intervenciones) el 04/09/2007 23:40:55
Hola a todos

como puedo llamar/ejecutar un array sin usar instrucciones de ensamblador ? (CALL puntero del array)
por ejemplo quiero copiar los bytes de una funcion a un array y llamar al array.
esto lo puedo hacer usando instrucciones en ensamblador pero lo hago usando solo Delphi ?

estoy tratando de portar una DLL que escribi en ensamblador a Delphi pero siempre que me encuentro con algun problema termino recurriendo a ensamblador para que me ayude.

gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:llamar a un array

Publicado por Diego Romero (26 intervenciones) el 05/09/2007 05:10:57
Evidentemente Delphi no ejecuta arrays porque los arrays no son código, son datos. Pregunta: qué tipo de exportación de procedimientos/funciones usaste para armar la DLL?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:llamar a un array

Publicado por Teh (8 intervenciones) el 06/09/2007 02:55:41
un array es simplemente un espacio en memoria que contiene bytes, al igual que una funcion o procedimiento en memoria.

que se use generalmente o siempre los arrays para guardar datos/informacion no significa que no puedan ser ejecutados. obviamente para que puedan ser ejecutados estos datos del array tienen que tener una secuencia logica (opcodes correctos) que el CPU puega leer y ejecutar sin que la aplicacion haga crash.

he pensando de una solucion que creo que funcionara correctamente
y es usando el type, serial algo asi
similar a cuando obtienes un puntero a una funcion mediante la API GetProcAddress() y se lo asignas a una variable.

type
TMagicProc = procedure (parametros deseados);
var
MagicProc: TMagicProc;

..
@MagicProc := @ArrayMagico;
MagicProc(procedimientos);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:llamar a un array

Publicado por Diego Romero (26 intervenciones) el 06/09/2007 05:57:21
Eso es verdad lo que no quiere decir que sea válido en Object Pascal, de hecho, no lo es.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:llamar a un array

Publicado por Teh (8 intervenciones) el 06/09/2007 23:31:49
que no es valido?

si el compilador tiene la opcion de llamar a un puntero (una direccion en memoria) entonces puedo llamar a cualquier cosa. lo que quiere decir que es posible.

solo queria llamar a un array porque estaba portando mi funcion que engancha funciones APIs de windows (inline hooking) y uso el array como trampolin para llamar a la funcion enganchada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:llamar a un array

Publicado por Diego Romero (26 intervenciones) el 07/09/2007 10:08:16
Pues declárala y listo, no necesitas hacer malabares con punteros para eso. Si sabes el nombre de la función API y sabes los parámetros, declara una función importada y ya.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:llamar a un array

Publicado por Teh (8 intervenciones) el 08/09/2007 04:29:58
no te entiendo...
no quiero usar una funcion API.
queria crear un gancho en una funcion API (Inline API Hooking) y eso no se logra simplemente declarando la funcion API sino modificando la funcion API.

original
caller -> API -> retornar a caller

despues del gancho
caller -> Espia -> API -> retornar a caller
o..
caller -> API ->Espia -> retornar a caller.

http://video.google.es/videoplay?docid=8971123609530146514
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:llamar a un array

Publicado por Diego Romero (26 intervenciones) el 09/09/2007 08:42:49
Quizá esto te ayude:
http://www.driverop.com.ar/tutorialesdelphi/hooktuto/index.html

PD: gracias por el video.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:llamar a un array

Publicado por Teh (8 intervenciones) el 10/09/2007 00:07:49
esos son otros tipos de hooks (windows hooks).
ya logre lo que queria, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar