Vale, creo que no puse el ejemplo más adecuado, quizás tendría que haber puesto otro ejemplo pero pensé que como ese era el que usaba todos los bytes de la estructura era más complejo.
Ciertamente al ser esa subestructura de campos de tipo byte se podría acceder a ellos simplemente por índice, pero no era mi intención. Mi intención era mostrar cómo remapear la estructura (dándole otro formato pero usando los mismos datos gracias a
DllStructGetPtr). En este caso quizás sólo sirve para dar nombre a los campos, en los otros casos también sirve para cambiar el tipo (de ristra de bytes a dword, por ejemplo). Así que de acuerdo que fui poco afortunado al elegir el ejemplo.
El código era incompleto, sólo era un ejemplo de remapeo, faltan los demás, mi intención era mostrar la técnica a usar.
Sigo sin estar de acuerdo con no reservar la memoria suficiente para la estructura. No es necesario que pienses que alguien va a hacer un virus, hay otros escenarios en los que puede fallar. No sabes cómo las funciones internas usan esos datos, piensa por ejemplo que la estructura interna tiene esos bytes
dummy y
pad que "no se usan para nada". ¿Para nada? Eso es lo normal, pero ¿y si la dll los usa para cálculos intermedios? ¿o si meten códigos de error no documentados o cosas así?
No se trata de ser paranoico, ¿pero para qué arriesgarse? La realidad es que esos bytes existen y aunque la documentación dicen que no se usan podrían usarse de forma interna. Los programadores saben que eso está ahí y podría darles por usarlo. Lo sencillo es hacer las cosas bien y reservar la memoria que requiere la estructura, a partir de ahí que hagan lo que quieran con ella. Y si escriben en bytes que se supone que no hay nada no estarán escribiendo en zonas de memoria que pertenecen a otros datos.
Quizás estáis orientados a ignorarlos porque se llaman
dummy y
pad, pero yo los veo como si se llamaran
reserved, podrían usarse en el futuro o estar usándose ahora en cosas internas. Y si no es así no va a fallar porque definamos bien la estructura, pero sí puede fallar si no la definimos completa.
(
Chefito, yo cuando escribo algo largo o a trozos me abro un notepad y copio el texto, por si acaso
Y sí, porque también he sufrido lo mismo alguna vez
)