View Full Version : [C] GCC - generare un file object per nasm
nico88desmo
20-02-2007, 16:10
come da titolo...
come si fa a generare un file object da linkare successivamente insieme ad un file .obj scritto in assembly-NASM?
Grazie!
come da titolo...
come si fa a generare un file object da linkare successivamente insieme ad un file .obj scritto in assembly-NASM?
Grazie!Il problema non è generare un file oggetto da un sorgente C e da un sorgente ASM (lo fai usando le apposite opzioni del gcc e del nasm). La questione importante è che se devi chiamare dal C delle funzioni scritte in assembly, devi preoccuparti di stabilire e rispettare le convenzioni di passaggio dei parametri.
nico88desmo
20-02-2007, 17:27
Il problema non è generare un file oggetto da un sorgente C e da un sorgente ASM (lo fai usando le apposite opzioni del gcc e del nasm). La questione importante è che se devi chiamare dal C delle funzioni scritte in assembly, devi preoccuparti di stabilire e rispettare le convenzioni di passaggio dei parametri.
questo si.
il problema è che una volta generato il .o con gcc, poi scrivo da cmd:
- link.exe S_ASS.OBJ source_c.o
come risposta ho:
source_c.o : fatal error L1101: invalid object module.
a cosa è dovuto?
(S_ASS.obj = object del sorgente assembly scritto con nasm;
source.o = object del sorgente C; )
questo si.
il problema è che una volta generato il .o con gcc, poi scrivo da cmd:
- link.exe S_ASS.OBJ source_c.o
come risposta ho:
source_c.o : fatal error L1101: invalid object module.
a cosa è dovuto?
(S_ASS.obj = object del sorgente assembly scritto con nasm;
source.o = object del sorgente C; )Scusa ma link.exe che linker è?? È forse quello del VC++?? Poi quali opzioni hai passato al nasm per compilare il sorgente assembly?
Se usi il gcc potresti usare il linker 'ld'.
Comunque rimane il fatto che devi stabilire quale formato generare per l'oggetto del sorgente assembly. Se lavori in ambiente Windows, credo che possa andare bene l'opzione -f win32.
nico88desmo
21-02-2007, 10:51
per generare l'object del .asm ho fatto:
-> nasm -f obj s_ass.asm -l s_ass.lst
poi ho fatto:
-> bcc32 -3 source_c.c s_ass.obj
ora la compilazione funziona...è il programma che non va ora.
c'è un buon programma per fare il debug???
Esempio completo di programma Win32 console in C/ASM compilato con BCC 5.5 (Borland C++) e NASM
main.c
#include <stdio.h>
#include <stdlib.h>
int _cdecl Sum32 (int a, int b);
int main (int argc, char *argv[])
{
int a, b, s;
if (argc == 3)
{
a = atoi (argv[1]);
b = atoi (argv[2]);
s = Sum32 (a, b);
printf ("%d\n", s);
}
return 0;
}Compilare con:
bcc32 -c -tWC -omain.obj main.c
func.asm
segment code use32 para
global _Sum32
;===============================================================================
; IN: [ebp+8] = operando 1
; [ebp+12] = operando 2
;
; OUT: eax = operando 1 + operando 2
;===============================================================================
_Sum32:
push ebp
mov ebp,esp
mov eax,[ebp+8]
add eax,[ebp+12]
mov esp,ebp
pop ebp
ret
Compilare con:
nasmw -f obj -o func.obj func.asm
Linkare con:
ilink32 -c -C -Gn -x -ap -Tpe c0x32.obj main.obj func.obj,prova.exe,,cw32.lib kernel32.lib user32.lib
Esempio di lancio:
prova.exe 120 30
nico88desmo
21-02-2007, 13:51
non potevo avere una risposta più completa! :)
Grazie mille!
comunque se trovo qualche problema scrivo eh :p
nico88desmo
21-02-2007, 16:21
eccomi di nuovo...:p
che programma mi consiglieresti per fare il debug di un .exe?
che programma mi consiglieresti per fare il debug di un .exe?Se usi il BCC (il compilatore a linea di comando della Borland), allora il Turbo Debugger (vedi <qui> (http://www.codegear.com/Default.aspx?tabid=139)).
Comunque in fase di compilazione/link bisogna specificare delle opzioni per generare le informazioni di debug. Nel mio esempio completo che ho postato non ho usato queste opzioni.
nico88desmo
21-02-2007, 20:21
ora provo ad utilizzarlo allora...intanto ti ringrazio per le risposte :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.