Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Usuario887 en 1 Noviembre 2021, 17:44 pm



Título: Compilacion de codigo en C a un binario puro.
Publicado por: Usuario887 en 1 Noviembre 2021, 17:44 pm
Hola,

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

Código
  1. int main()
  2. {
  3.    int x;
  4.    x=0;
  5. }
  6.  

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

Código
  1.  
  2. org 100h
  3.  
  4. mov bp, sp
  5. sub sp, 4
  6.  
  7. mov ax, 0
  8. mov [sp], ax
  9.  
  10.  

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.  :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