Pregunta

Estoy intentando editar una biblioteca en el editor hexadecimal, el modo de inserción. El punto principal es cambiar el nombre de unas pocas entradas en el mismo. Si lo hago en el modo "Otherwrite", todo funciona bien, pero cada vez que intento agregar unos símbolos al final de la cadena en el modo "Insertar", la biblioteca no se carga. Cualquier cosa que me falta aquí?

¿Fue útil?

Solución

Sí, se está perdiendo un montón. Una biblioteca sigue el href="http://kishorekumar.net/pecoff_v8.1.htm" rel="nofollow noreferrer"> PE / COFF formato

En el caso que se está editando recursos, existe la posibilidad de hacerlo sin romper cosas si se asegura a corregir cualquier punteros y tamaños para cualquier cosa que apunta a después de las modificaciones, pero dudo que será fácil. En el caso que se está editando la sección .text (es decir, el código), entonces dudo que lograr que se haga, ya que los operandos de llamadas a funciones y saltos son ubicaciones relativas a su posición en el código - que se necesita para la actualización todo el código para dar cuenta de los cambios.

Una de las técnicas para superar esta es una "cueva de código", donde se sustituye una parte del código existente con una instrucción JMP explícita a algún lugar vacío (Usted puede hacer esto en tiempo de ejecución, donde se tiene la capacidad de crear nueva memoria ) - donde se define un código nuevo que puede ser de longitud arbitraria. - entonces usted explícitamente volver a JMP donde se llamó a partir de (+5 bytes dicen que para el código de operación JMP + operando)

Otros consejos

son los nombres que están cambiando a ellos la misma longitud que los nombres antiguos? Si no, entonces los desplazamientos de todo lo que se desplaza. Y realice cualquiera de las funciones de llamada entre sí? Eso podría ser otro punto de problema. Sería más fácil para obtener el código fuente (de la página web del proyecto si no está en casa, o desde el proveedor si está cerrado) y cambiarlos en eso, y luego volver a compilar. Soy curioso en cuanto a por qué va a cambiar los nombres de todos modos.

DLL son un formato binario complejo (código es decir compilado). El proceso de compilación de vueltas nombrados llamadas a funciones en las referencias cableadas a posiciones específicas en el archivo ( "compensaciones"). Por lo tanto si usted insertar caracteres en el medio del archivo, las compensaciones después de ese punto ya no se ajustan a lo que realmente está en la posición de los que hacen referencia, lo que significa que las llamadas a la función de la biblioteca van a ejecutar el código incorrecto (si se las arreglan para ejecutar cualquier cosa en absoluto).

Básicamente, el resultado final es lo que está haciendo siempre va a romper cosas. Si tiene la mala suerte, incluso podría romperlo realmente mal y causa graves daños.

Claro - un conocimiento detallado del formato, y lo que tiene que cambiar. Si usted se pregunta por qué algunos de sus ediciones causa de carga de falla, se echa en falta ese conocimiento.

Bibliotecas tienen la intención de ser escrito por el enlazador para el uso del enlazador. Ellos siguen un formato bien definido que se pretende que sea fácil para el enlazador para escribir y leer. No necesitan tolerancia para la intervención humana como un compilador.

Es muy sencillo, las bibliotecas no están destinados a ser modificado por los editores hexadecimales. Puede ser posible cambiar las entradas al sobrescribir con nombres de la misma longitud, o que puede arruinar un índice de alguna parte. Si cambia la longitud de nada, es muy probable romper punteros y metadatos.

Usted no da ninguna razón para querer hacer esto. Si es para la diversión, así, es más difícil de lo que esperaba. Si usted tiene otra razón, usted es mejor de conseguir la fuente, o conseguir a alguien que tiene la fuente para cambiar el nombre y reconstruir.

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