Compilacion de codigo en C a un binario puro.

Iniciado por Usuario887, 1 Noviembre 2021, 17:44 PM

0 Miembros y 1 Visitante están viendo este tema.

Usuario887

Hola,

Queria saber si alguien sabe como (mas bien enlazar) codigo de C a un binario puro, me explico:


int main()
{
   int x;
   x=0;
}


Watcom C puede producir un .COM del viejo MS-DOS a partir de este codigo y lo compila a algo asi:

Código (asm) [Seleccionar]


org 100h

mov bp, sp
sub sp, 4

mov ax, 0
mov [sp], ax



Hasta aqui todo bien.

Tengo dos problemas:

El codigo que genera Watcom C es precisamente para correr en MS-DOS y me estoy jalando los cabellos modificandolo para que termine en un binario puro, entre referencias al segmento de datos y etcetera...

Mi pregunta concreta es:

Imaginese que tengo el codigo anteriormente mencionado en C, y su respectivo archivo .OBJ

¿Como enlazo este .OBJ de forma tal que pueda especificar el ORGigen del programa (obviamente diferente a 100h) a, por ejemplo, 7c00h en el caso de un bootstrap? O lo que sea...

¿Como hago esto?

Gracias por adelantado.




[EDIT]

Lo que he descubierto hasta ahora es que puedo utilizar el comando ld.exe que viene con GCC para esto:

Citarld --oformat binary

La cuestion es que no se como.  :xD

No se como especificar ni relocalizaciones ni nada.




[EDIT 2]

Tambien se que las opciones respecto a relocalizaciones para ld.exe son:

Citar-q, --emit-relocs           Generate relocations in final output
 -r, -i, --relocatable       Generate relocatable output
 --embedded-relocs           Generate embedded relocs
 --split-by-reloc [=COUNT]   Split output sections every COUNT relocs
 --base_file <basefile>             Generate a base file for relocatable DLLs
 --enable-runtime-pseudo-reloc      Work around auto-import limitations by
                                      adding pseudo-relocations resolved at
 --disable-runtime-pseudo-reloc     Do not add runtime pseudo-relocations for
 --dynamicbase                  Image base address may be relocated using
 --base_file <basefile>             Generate a base file for relocatable DLLs
 --enable-runtime-pseudo-reloc      Work around auto-import limitations by
                                      adding pseudo-relocations resolved at
 --disable-runtime-pseudo-reloc     Do not add runtime pseudo-relocations for
 --dynamicbase                  Image base address may be relocated using

Sincera y apenadamente no se cual usar.




Despues de un millon de años lo logre:

Primer paso: Compilar el codigo a codigo objeto
Segundo paso: Convertir el codigo objeto a codigo ensamblador
Tercer paso: Hacer las modificaciones respectivas al ensamblador resultante
Cuarto paso: Ensamblar
Quinto paso: Enjoy