Pregunta:
¿Fusionar enumeraciones en IDA?
positron
2015-02-20 19:18:49 UTC
view on stackexchange narkive permalink

¿Hay alguna manera de modificar la fuente descompilada de IDA para reflejar los valores ed "OR" de dos o más enumeraciones?

Por ejemplo, tengo las siguientes enumeraciones,

  HTTP_QUERY_CONNECTION tiene el valor 23 y HTTP_QUERY_FLAG_REQUEST_HEADERS tiene el valor 0x80000000  

Me gustaría cambiar el código que tiene el valor 0x80000023 a

  HTTP_QUERY_CONNECTION | HTTP_QUERY_FLAG_REQUEST_HEADERS  

¿Es posible esa modificación en IDA?

One responder:
DarthGizka
2015-02-20 20:44:04 UTC
view on stackexchange narkive permalink

Sí, es posible. La enumeración debe establecerse en el tipo 'campo de bits', y las máscaras de bits deben establecerse de forma adecuada. Coloque el cursor en el nombre de la enumeración (en la vista Enum) y presione Ctrl-N; en la esquina inferior izquierda del diálogo que aparece hay una casilla de verificación llamada "Campo de bits".

Si todos los valores son independientes, la máscara de bits para cada valor es el valor en sí; si hay subcampos que contienen valores enumerados, estos deben tener la misma máscara. No conozco los detalles exactos de HttpQueryInfo (), así que estoy usando una máscara de 0xFFFF para la parte enumerada y supongo que los 16 bits superiores son indicadores independientes. Lo que necesita es algo como esto:

  HTTP_QUERY_FLAG_REQUEST_HEADERS valor 0x80000000 máscara 0x80000000HTTP_QUERY_CONTENT_TYPE valor 1 máscara 0x0000FFFF ... HTTP_QUERY_CONNECTION valor 23 máscara 0x0000FFFF máscaraHTTP_QUERY_ACCEPT0000 ... 

Sin embargo, puede resultar extremadamente difícil modificar una enumeración existente. No puede cambiar la enumeración a 'bitfield' si hay valores que necesitan enmascaramiento ('blah está obstaculizando' o algo así), pero si la enumeración no se establece en 'bitfield', entonces IDA no le permite establecer las máscaras para los miembros de enumeración. Es mejor crear una enumeración nueva desde cero.

Pequeño comentario, si su enumeración contiene un miembro que es cero, IDA se quejará de que no puede convertir la enumeración en un campo de bits.


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...