Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [ASM & C++] Funzione esterna

    Ciao
    ho bisogno di interfacciare una funzione fatta in ASM, compilata con NASM, su un programma in C++.
    All'inizio la funzione l'ho chiamata _func, perche' avevo letto che in ASM va messo l'underscore, e in C++ me la sarei vista come func, senza l'underscore, ma non funziona.
    Ho tolto l'underscore e non funziona, ho provato a cambiare i prototipi:

    extern void func();
    extern int func();
    extern void func(int);
    extern int func(int);

    ma non e' servito a nulla, ogni volta che richiamo la funzione, il linker da errore perche' e' irreperibile.
    Pero' il file oggetto viene linkato senza problemi...

    so che puo' sembrare assurdo, ma c'e' un modo per vedere i prototipi di tutte le funzioni utilizzare dal programma? adesso io ho il mio file OBJ, linkato al programma, vorrei fare in modo che dall'OBJ si riuscisse a risalire alla sintassi della funzione in C++.

    Grazie mille
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    Se puo' esserti utile

    questo pezzo di codice cmod1.cper esempio puo' essere richiato da un una chiamata asm o viceversa da c per stampare la stringa strc[]

    /* file cmod1.c */

    #include < stdio.h >

    /* variabili globali */

    extern char strasm[];
    char strc[] = "Stringa definita nel modulo CMOD1.C";

    /* prototipi di funzione */

    extern void printstr_asm(void);
    void printstr_c(void);

    /* entry point */

    int main(void)
    {
    printstr_asm();

    return 0;
    }

    /* printstr_c */

    void printstr_c(void)
    {
    printf("%s\n", strasm);
    }

  3. #3
    ...Terrible warlords, good warlords, and an english song

  4. #4
    scaricati la guida di Paul Carter "Pc Assembly Language"

    c'è esattamente quello che cerchi

    http://www.autistici.org/itassembly/docs.html
    ...Terrible warlords, good warlords, and an english song

  5. #5
    ehm... a dirla tutta mi ero ispirato proprio al libro di carter, pero' + aggiornato, del 2002, che ho trovato con il nasm. Pero' non riesco a capire perche' non vada...
    _ lo metto, faccio un programma come quello che menziona il libro, ma non esce... bho
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  6. #6
    umm....
    ho letto e provato codici su codici, alla fine sono giunto (su linux) a questa conclusione:
    se compilo in programma come sorgente C, funziona
    se compilo come C++, non funziona.

    Dopo averci pensato un po su, ho notato che l'errore e' lo stesso di quando NON SCRIVO using namespace std;, quindi, ho pensato, e credo di aver trovato il problema, che la funzione non e' dichiarata in alcun namespace, o almeno, non so in quale sia dichiarata.

    Ora, se non mi sbaglio, c'e' anche il namespace global, giusto?
    quindi, se nel codice assembler metto
    global _routine

    e nel c++ scrivo
    using namespace global;

    dvorebbe andare senza problemi, giusto?

    Asptto una risposta con ansia
    grassie a tutti

    ciauz
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  7. #7
    no, namespace global nn funge...
    come faccio???
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  8. #8
    Allora prova:

    codice:
    extern "C" void func();

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.