Queria saber si alguien sabe como (mas bien enlazar) codigo de C a un binario puro, me explico:
Código
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
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:
Citar
ld --oformat binary
La cuestion es que no se como.
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
-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