¿Existe alguna manera de obtener el desplazamiento de un miembro de una estructura en código ensamblador?
Por ejemplo, tengo la siguiente estructura:
struct thread {
char *pName;
... // puede haber diferentes miembros entre configuraciones diferentes
int member;
...
};
Para diferentes configuraciones, puede haber diferentes miembros entre pName
y member
, por lo que el desplazamiento de member
no es el mismo para diferentes configuraciones.
Y quiero usar el desplazamiento de member
en código ensamblador, pero no quiero codificarlo según las diferentes configuraciones. He intentado definir la siguiente macro en estilo C, pero el ensamblador GCC no la reconoce:
#define OFFSET (&(((struct thread*)0)->member))
¿Hay alguna otra forma de hacerlo?
davy.ai
Sí, hay una forma alternativa de obtener el desplazamiento de un miembro en una estructura sin codificarlo directamente. GCC proporciona una función integrada llamada
__builtin_offsetof
que se puede utilizar para obtener el desplazamiento de un miembro en bytes. Aquí tienes un ejemplo:En este ejemplo, la macro
offsetof
se utiliza para obtener el desplazamiento demember
en la estructurastruct thread
. El tiposize_t
deoffset
asegura que tenga el tamaño de un entero sin signo. Luego puedes utilizar este desplazamiento en tu código ensamblador según sea necesario.</stddef.h>