Pregunta

Quiero reemplazar una línea de código en la API 3d partido con mi propio código.

Me refiero a esto es práctica cuestionable, pero necesito para arreglar su error.

¿Fue útil?

Solución

no tolerar desmontar el código de terceros o software comercial, pero hay una manera que puede trabajar.

Si utiliza Reflector con el Reflexil plugin puedes eliminar tanto el nombre fuerte firma, y Inyectar / código de cambio en un conjunto.

Otros consejos

Puede, pero tendrá que trabajar con MSIL, no con C #.

http://ccimetadata.codeplex.com/ http://www.mono-project.com/Cecil

También es posible que decomplie DLL usando Reflector.NET, corrección de errores y complie de nuevo.

Sí se puede. Por un lado, la DLL de conjunto es sólo CIL (Common Intermediate Language). En principio podría modificar directamente a sí mismo.

Por ejemplo, se podría utilizar una herramienta como Cecil:

http://www.mono-project.com/Cecil

También podría descompilarlo con una herramienta como reflector en el idioma en el que se sienta más cómodo. En ese momento, sólo podría modificar el código y volver a compilar en su propio montaje personalizado.

http://www.red-gate.com/products/reflector/

Cecil también tiene un decompilador:

http://evain.net/blog/articles/2008 / 12/15 / Cecil-decompilador

MonoDevelop (IDE Mono) de que abra un conjunto como un proyecto deja. Sólo tiene que abrir el archivo DLL como un archivo de proyecto y (si se dispone de suficiente información de depuración) que se verá como un proyecto de código que luego se puede modificar y construcción.

http://monodevelop.com/

Todas estas herramientas se pueden utilizar en Microsoft .NET o Mono. MonoDevelop se puede instalar en Windows sin necesidad de instalar Mono en absoluto.

Por supuesto, estoy diciendo que pueda. No estoy necesariamente avalando que lo haga. Usted tendrá que trabajar a cabo la parte legal y ético de las cosas por sí mismo ya que usted sabe más acerca de su situación.

¿Usted ha considerado tratando de llamadas proxy y de intercepción con un AOP herramienta, como < a href = "http://www.sharpcrafters.com/" rel = "nofollow noreferrer"> PostSharp o Linfu?

Explicación: marcos (AOP Aspect Oriented Programming) permite que se inyecte el comportamiento ante un después de las llamadas, llamadas de cálculo de la ruta. Más información aquí

Algunos beneficios adicionales de este vs cambiar MSIL:

  • La solución podría sobrevivir actualizaciones del DLL tercera parte (API dada es estable)
  • Usted debe estar dentro de condiciones de licencia
  • Se puede quitar fácilmente el proxy si que fijan el método en cuestión

Si no permite que se inyecte su propio código y no te dan la fuente, que no tienen la oportunidad de hacerlo de una manera legítima.

Conjuntos normalmente se firman y no puede cambiarlo. Además, la mayoría del software está protegido por derechos de autor.

Si usted es un cliente importante para este proveedor, solicite el código. Y, por supuesto, por el derecho a corregir este error.

Si usted tiene acceso al código fuente por qué no hacer el cambio y re-compilación?

¿Por qué no volver a escribir el método con errores usted mismo (dentro de su propio código) y el uso que en lugar de la biblioteca externa?

Si se trata de una modificación menor, que puede tener algún ida y vuelta de la suerte del código a través ildasm continuación ilasm.

Pensando en esto un poco diferente, es posible que se resuelva el IP con DNS en el inicio de su aplicación antes de involucrar el componente no esencial, y luego poner una entrada en el archivo HOSTS en system32 \ drivers \ etc y de esa manera se no se necesita realmente para salir al DNS de nuevo (así se quiere, pero debe ser casi instantánea).

También en vez de tratar de hacer esto a través de su ensamblaje en realidad mirar a los métodos de inyección API de Windows DLL de conectar la llamada al sistema de resolución de DNS para realizar el almacenamiento en caché.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top