FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Problemas de conversion de código de x32 a x64
Buenas amigos, a parte de que algunas funciones de Windows ahora necesiten wchar_t* en vez de char* y int64_t en lugar de int, me encuentro con algunos problemas más que no sé cómo salvar. El primero es la estructura CONTEXT la cual contiene información de un proceso como los flags y registros, en x64 no me la reconoce ¿Sabéis cual es su equivalente para x64?
Otro es el DWORD que he visto que tiene que ser DWORD64 pero no sé si eso existe en c++builder o tiene que ser uint64_t o algo así. Última edición por aguml fecha: 20-05-2020 a las 00:10:10. |
#2
|
||||
|
||||
Hola.
Revisa si el siguiente enlace te ayuda en algo: 64-bit Windows Data Types Compared to 32-bit Windows Data Types Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
||||
|
||||
Gracias, me está sirviendo de ayuda aunque esto va para largo ya que una vez me compile tendré que revisar todo y ver como funciona cada cosa y estudiar como funcionan en x64 porque hay muchas que seguramente no coincidan con el funcionamiento de x32.
Tengo ahora mismo tres problemas/dudas: 1-No se que pasa con el tipo CONTEXT que si hago por ejemplo Código PHP:
Código PHP:
Código PHP:
Código:
[bcc64 Warning] THiloDebugger.cpp(1839): cannot delete expression with pointer-to-'void' type 'void *' 3-No me acepta la estructura __try catch(...), en su lugar he tenido que usar __try __except(EXCEPTION_EXECUTE_HANDLER) ¿hay alguna diferencia entre uno y otro? y por otro lado ¿que diferencia hay entre __try catch(...) y try catch(...)? Ahora mismo los tengo así: Código PHP:
Última edición por aguml fecha: 20-05-2020 a las 10:54:54. |
#4
|
||||
|
||||
Pues pasa algo raro, aunque al poner el punto no me ofrece ninguno de los miembros que forman parte de la estructura, si lo pongo yo si lo acepta así que guiándome de esa estructura estoy corrigiendo todo lo que pueda pero en algunos puntos me veo que no puedo porque no se para que son algunos de ellos y a que equivalían en x32 para modificar sus respectivos métodos de x32 y convertirlos a x64.
Por ejemplo: Código PHP:
Código PHP:
Del resto no tengo ni idea de para que son y como leerlos y escribirlos y que utilidad podría tener leerlos o escribirlos. |
#5
|
||||
|
||||
He conseguido encontrar info por la red y he reajustado todo para que me lea los registros de x64 (o eso creo porque eso está aun por ver) pero ahora tengo un problema y es que en el de x32 usaba EnumProcessModules para cuando me atacheo a un proceso poder saber las dlls que tenia cargadas el proceso y al cambiar a x64 vi que en la msdn dice que hay que usar EnumProcessModulesEx y el problema que tengo es que me da un error sobre la libreria psapi.lib:
Cita:
¿Alguna idea? Última edición por Casimiro Notevi fecha: 20-05-2020 a las 23:26:52. |
#6
|
||||
|
||||
Arreglado eso también. lo tenía como:
Código PHP:
Código PHP:
Ahora mismo ya compila y me queda lo mas duro, comprobar todo y reparar fallos. |
#7
|
||||
|
||||
Ahora tengo otro problema, no me lee el CONTEXT. Lo tengo asi:
Código PHP:
Para crear el proceso lo tengo así: Código PHP:
Última edición por aguml fecha: 21-05-2020 a las 16:47:58. |
#8
|
||||
|
||||
He visto un poco el código de Titán enginer y veo que inicializa de forma diferente CONTEXT:
Código PHP:
Código PHP:
|
#9
|
||||
|
||||
Veo que tanto para enviar cómo leer el context suspende antes el thread y después lo revive:
Código PHP:
|
#10
|
||||
|
||||
Bueno, después de mucho investigar he conseguido aprender cómo configurar el proyecto para que se lance como administrador y así poder obtener privilegios de depurador después y he estado haciendo pruebas y buscando información sobre el context. Sé que tiene que alinearse a 16 bytes y en winnt.h tengo esto:
Código PHP:
CONTEXT con; ¿Tengo que hacer algo más para que esté bien alineada? A todas las personas que le pasó era por el tema de la alineación de la estructura pero o eran en otro lenguaje o no especifican como arreglaron esto. |
#11
|
||||
|
||||
He mirado en winnt como define DECLSPEC_ALIGN(n) y vi esto:
Código PHP:
Código PHP:
Entonces coloqué el siguiente codigo antes de la cabecera de winnt.h: Código PHP:
Código PHP:
Necesito vuestra ayuda Última edición por aguml fecha: 23-05-2020 a las 11:33:42. |
#12
|
||||
|
||||
Perdón pero me di cuenta que el compilador me lanzaba Warnings y vi que estaba redefiniendo la constante así que la dejé así:
Código PHP:
|
#13
|
||||
|
||||
Al final di con el problema. El código era el de x86 y lo estaba adaptando a x64, pues bien, la dichosa estructura en x86 tiene que estar alineada a 8 bytes y para ello antes de la declaración de la clase había un pragma pack(push,8) y al final estaba su respectivo pragma pop con lo que quitando ambas ya fubciona y me deja depurar y ahora toca ir viendo los fallos que vayan saliendo.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Aportación del código de un stored procedure para conversión literal de números | birmain | Firebird e Interbase | 12 | 16-07-2015 19:12:29 |
Problemas con el codigo SQL | Vales08 | SQL | 26 | 13-01-2012 03:05:46 |
Conversión de código | altp | .NET | 2 | 10-06-2008 12:22:36 |
problemas de conversión a PDF con ReportBuilder y TExtraDevices | agustibaldo | Impresión | 10 | 06-07-2007 14:52:41 |
problemas de conversion... | User_baja1 | Varios | 2 | 30-08-2005 13:45:58 |
|