xd
¿Lo usual? ¿O sea, lo dices por lo que dijiste sobre el depurador ahi?
No...
No estoy utilizando depuradores.
este codigo:
{
return 0;
}
int main()
{
}
si se compila con
wcc386 main.c -s -w9 -e25 -oa -d0 -5 -bt=nt
y luego se procesa el codigo objeto con objconv para que me muestre el codigo en formato de nasm:
objconv -fnasm main.obj -o main.asm
resulta:
global strlen
global main
global _cstart_
_cstart_:
call main
ret
strlen:
mov eax, 0
ret
main:
call strlen
ret
el codigo resultante es PIC. No es necesario que sea PIC, pero hay funciones que requiero que sean PIC, porque se implementan en diferentes direcciones. No quiero especificar para no confundir, pero ese seria el objetivo.
Hasta ese punto que mostre no hay problema el problema viene cuando quiero hacer el codigo compatible con sistemas de 64 bits.
El codigo no tiene que ser portable e implemento nuestras propias funciones estandar. No quiero usar las que proporciona GCC.
es decir, entiendo que el prototipo de strlen para el C estandar es:
size_t strlen ( const char * str
);
pero no quiero tener nada que ver con el "C estandar", sino lo que ofrece el compilador de WATCOM C, que es que ni compila ni enlaza librerias sin pedirselo.
NOTA en el link que adjuntaste se habla de la API de Windows, en este caso, a pesar de que que hablo de WATCOM, no tiene nada que ver con Windows especificamente. Aunque sin duda el alineamiento es un tema que se debe tomar en cuenta.
Eternal IdolYa lo solucione.
Para quien se pregunte como:
Los procedimientos que implementaran estrictamente codigo ensamblador, los implemente en archivos distintos. Los compile con NASM y los enlace con LD junto al codigo en C.
Por otra parte, para decirle a GCC "que no enlace nada" y ademas que no incluya funciones inesperadas:
gcc -pie -nostdlib -nostartfiles -fno-stack-protector main.c -c -O -o main.obj
ADVERTENCIAComo se puede notar, la necesidad implica saltarse la proteccion del stack (para no incluir funciones "inesperadas").
Esto puede suponer riesgos de SO, obviamente.
Un saludo.