Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    120

    [assembly] __asm (non funziona con GCC)

    Ciao a tutti.. siccome ho problemi con il compilatore GCC qualcuno per favore può convertirmi questo codice? ho visto che usa un'altra sintassi ma io non saprei proprio come cambiarlo xkè non conosco l'assembly

    __asm {
    mov eax, addr
    call addr
    mov addr, eax
    }

    __asm {
    mov eax, addr
    push cbSize
    push pInputs
    push nInputs
    call addr
    mov addr, eax
    }

    grazie

  2. #2
    Puoi usare lo switch -masm=intel da command-line.

    Esempio "test.c":

    codice:
    #include <stdio.h>
    #include <string.h>
    
    int main (void)
    {
    
    	__asm (
    		"xor eax, eax\n"
    		"mov ecx, 1\n"
    	);
    	return 0;
    }
    Da compilare con gcc test.c -masm=intel.
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    120
    ciao grazie per la risposta..
    io dovrei creare una dll con un sorgente scritto in c++ e asm, e poi richiamare questa dll con un programma scritto in c#
    adesso sto usando l'ide codeblocks, se uso il tuo metodo mi crea un exe.. e sinceramente non sò cosa farci

    questo è l'header file:
    #ifndef MZBOT2_DLL_VERSION_HEADER
    #define MZBOT2_DLL_VERSION_HEADER

    #include <windows.h>
    #include <WinAble.h>

    /* To use this exported function of dll, include this header
    * in your project.
    */

    #ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
    #else
    #define DLL_EXPORT __declspec(dllimport)
    #endif


    #ifdef __cplusplus
    extern "C"
    {
    #endif

    unsigned int DLL_EXPORT MzBot_Init();
    unsigned int DLL_EXPORT MzBot_SendInput( UINT nInputs, LPINPUT pInputs, int cbSize );

    #ifdef __cplusplus
    }
    #endif

    #endif //#ifndef MZBOT2_DLL_VERSION_HEADER

    il main.cpp
    #include "main.h"

    unsigned int DLL_EXPORT MzBot_Init()
    {
    HMODULE m = LoadLibrary( "MzBot2.dll" );
    if ( !m ) {
    return -3;
    }
    unsigned long addr = (unsigned long) GetProcAddress( m, "InitMzBot" );
    if ( !addr ) {
    return -4;
    }

    __asm {
    mov eax, addr
    call addr
    mov addr, eax
    }

    return addr;
    };

    unsigned int DLL_EXPORT MzBot_SendInput( UINT nInputs, LPINPUT pInputs, int cbSize )
    {
    HMODULE m = LoadLibrary( "MzBot2.dll" );
    unsigned long addr = (unsigned long) GetProcAddress( m, "AltSendInput" );

    __asm {
    mov eax, addr
    push cbSize
    push pInputs
    push nInputs
    call addr
    mov addr, eax
    }
    return addr;
    };

    cercando su internet ho scoperto che devo appunto convertirlo in AT&T, ho provato ad usare qualche programmino che lo facesse al posto mio ma con scarsi risultati.. help

  4. #4
    adesso sto usando l'ide codeblocks, se uso il tuo metodo mi crea un exe.. e sinceramente non sò cosa farci
    Avrei benissimo potuto evitare di farti l'esempio e limitarmi a suggerirti lo switch da usare. Non devi convertire la sintassi da Intel a AT&T se non hai tempo né voglia, di sicuro devi scrivere correttamente il codice della DLL e compilarla come tale (e non come un normale eseguibile).
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    120
    non ci capiamo
    non ho mai compilato il codice sorgente come eseguibile ma come "Dynamic Link Library", tu mi hai fatto un esempio: gcc test.c -masm=intel..
    se io ho 2 files: header.h e main.cpp e voglio creare una dll come faccio tramite linea di comando?


    PS adesso correggo gli errori..thanks

  6. #6
    non ci capiamo
    Se non leggi quello che ti scrivo e non clicchi sui link che ti propongo non possiamo capirci...

    tu mi hai fatto un esempio: gcc test.c -masm=intel..
    Dal momento che nel primo messaggio non avevi specificato che volevi creare una DLL mi sembra il minimo.
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    120
    non ho specificato perchè avevo chiesto solamente di convertire l'asm da intel a AT&T
    cmq adesso leggo il link che mi hai dato

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 © 2024 vBulletin Solutions, Inc. All rights reserved.