strip_tags remove quitar para funcion etiquetas ejemplo function dll parameters name-decoration

function - remove - strip_tags wordpress



Encontrar los parámetros de la función Dll (7)

La única forma de hacerlo es desmontando la función y viendo cómo utiliza los registros y la pila. IDA Pro es la mejor herramienta para hacer esto, pero no es algo trivial.

¿Cómo puedo encontrar los parámetros de una función Dll no documentada ?

Busqué en Internet y terminé encontrando una forma: implica funciones decoradas. Sin embargo, no puedo encontrar una manera de obtenerlos.

Cualquier ayuda sería apreciada.


No estoy muy familiarizado con el formato PE que utiliza Windows, pero estoy bastante seguro de que no existe una forma realmente fácil de hacerlo. Si la tabla de símbolos no se ha eliminado, es posible que pueda encontrar información (no estoy seguro de cómo Windows almacena la información de depuración en PE), pero es casi seguro que no lo ayudará con los tipos de parámetros. Lo mejor que puedes hacer es cargar el archivo DLL en un depurador y experimentar con él ... monitorear la memoria en bruto en los marcos de la pila, enviar varios tipos de variables, etc.

Incluso si encuentra un buen recurso en la información de depuración en un archivo PE, seguramente no habrá información para una función privada.


Si la única información que tiene es el nombre de la función no decodificada, desafortunadamente no es posible deducir los parámetros de la función solo de eso.

Si es bueno con el ensamblaje, es posible desmontar el código de máquina para la función e invertirlo. Pero eso es bastante difícil de hacer para todas las funciones, excepto para las más simples.


¿Es COM Dll? Si se trata de un COM Dll, regístrelo, utilice la vista OLE para conocer las Interafaces y los parámetros.


Es necesario desmontar la aplicación utilizando, como señaló Paul, algo así como IDA Pro (o la versión gratuita de la misma).

Un buen recurso introductorio es el Wikibook, Desmontaje x86 . Específicamente, eche un vistazo a la sección de funciones y marcos de pila . Deducir los parámetros de la función puede ser sencillo para funciones simples que toman algunos parámetros de tipo estándar.

Probablemente la mejor manera de comenzar con este tipo de cosas es crear una pequeña DLL de prueba, crear algunas funciones con parámetros conocidos y luego desensamblar su DLL para ver los patrones. Aprenda a desensamblar sus propias funciones (para las cuales tiene el código fuente y conozca la firma completa) en lugar de sumergirse en el desmontaje de cosas de terceros.


Antes que nada, descargue Dependency Walker y abra su DLL. Verá símbolos exportados e importados. Si el nombre de su función es similar a _MyFunction, es estilo "C" (no decorado) y no tiene mucho que ver con eso (puede desmontarse como se dijo anteriormente)

Si se parece más a "_MyFunction @ LoNgSetOfSome @ _StrangeChAracTers" está decorado en C ++ y puedes tratar de "decorarlo" usando información {no oficial} de aquí


Hice una respuesta bastante profunda aquí , ReactOS es su mejor apuesta, ya que parece de nuevo, todo el mundo aquí está un poco fuera de lugar.

Desaconsejaría encarecidamente intentar desarmar las DLL del sistema.

A MUCHO más advenedizo (y no creo que se haya discutido hasta ahora, desde el punto de vista de las cosas), la técnica consiste en enumerar los contenidos de los AP.

Los archivos PDB son símbolos de depuración, como se puede saber, sin embargo, se requiere que Microsoft, debido a la acción de casos judiciales antimonopolio, libere grandes volúmenes de información no documentada.

La información totalmente precisa, utilizable y actualizada para cantidades masivas de la API de Windows solo se documenta a través de los archivos de PDB. La convención de llamadas, los recuentos de argumentos e incluso los tipos y nombres de argumentos están documentados (sin embargo, no son los específicos con respecto al uso del curso :).

Revise el SDK de DIA, dia2dump es un buen ejemplo distribuido con Visual Studio, para investigar más a fondo, también proporciona una solución para descodificar las funciones, para hablar específicamente de su pregunta.

Además, kernel32 proporciona UnDecorateSymbolName, por lo que puede usarlo también si no desea vincular las bibliotecas de debug sdk.