begin process at 2010 02 09 17:43:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

c, c++ et asm

 > 

Appel d'API windows en ASM avec VC++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Appel d'API windows en ASM avec VC++

lundi 1 novembre 2004 à 11:37:42 | Appel d'API windows en ASM avec VC++

cancooler


Bonjour a tous,
voici ma question: Je desirerai appeler une API windows dans un bloc de code ASM compilé avec VC++

Voila le code qui me pose probleme: l'exemple 1 compile et s'execute sans erreur, l'exemple 2 compile et genere une erreur au moment du 'call MessageBox' car ici l'API est appelee directement.


//EX1: The good one

#include <windows.h>
#include <stdio.h>

//Prevent the console from popping up during the program
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )


char MsgBoxText[] = "MsgBoxText";
char MsgBoxCaption[] = "MsgBoxCaption";


void MyMessageBox(int a, int b, int c, int d)
{
MessageBox((HWND)a, (LPCTSTR)b, (LPCTSTR)c, (UINT)d);
}


void main(void)
{

int addTxt = (int)MsgBoxText;
int addCap = (int)MsgBoxCaption;


__asm
{
push MB_OK
push addTxt
push addCap
push NULL
call MyMessageBox
add esp,0x10
}
}

/////////////////////////////////////////////////////////////////////////////////

//EX2: The bad one

#include <windows.h>
#include <stdio.h>

//Prevent the console from popping up during the program
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )


char MsgBoxText[] = "MsgBoxText";
char MsgBoxCaption[] = "MsgBoxCaption";


void main(void)
{

int addTxt = (int)MsgBoxText;
int addCap = (int)MsgBoxCaption;


__asm
{
push MB_OK
push addTxt
push addCap
push NULL
call MessageBox
add esp,0x10
}
}


Merci d'avance


lundi 1 novembre 2004 à 13:19:22 | Re : Appel d'API windows en ASM avec VC++

AlexMAN

Membre Club
en asm inline, faut appeler une api de cette maniere :

call dword ptr [API]

Et ds ton code, pkoi fais tu un add esp, 10 ??

++
mardi 2 novembre 2004 à 15:39:54 | Re : Appel d'API windows en ASM avec VC++

ymca2003

add esp,0x10 est nécessaire si la fct appelée est en __cdecl (convetion d'appel du C, la valeur par défaut pour ttes les fct perso). Le truc c'est que les fct API sont __stdcall et donc il ne faut pas nettoyer la pile après l'appel (la fct se charge de le faire)
mercredi 3 novembre 2004 à 11:55:56 | Re : Appel d'API windows en ASM avec VC++

cancooler


Ok merci c cool!

Voila le code, si ca peut etre utile a qqu...


#include <windows.h>


//Prevent the console from popping up during the program
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )


char MsgBoxText1[] = "MsgBox1Text";
char MsgBoxText2[] = "MsgBox2Text";
char MsgBoxText3[] = "MsgBox3Text";

char MsgBoxCaption[] = "MsgBoxCaption";

char ModuleName[] = "user32.dll";
char ProcName[] = "MessageBoxA";


typedef void (*MYPROC)(LPTSTR);


void main(void)
{

int addTxt1 = (int)MsgBoxText1;
int addTxt2 = (int)MsgBoxText2;
int addTxt3 = (int)MsgBoxText3;
int addCap = (int)MsgBoxCaption;

HINSTANCE hModule = LoadLibrary(ModuleName);
MYPROC ProcAdd =
(MYPROC) GetProcAddress(hModule, ProcName);

__asm
{
push MB_OK
push addCap
push addTxt1
push NULL
call ProcAdd

push MB_OK
push addCap
push addTxt2
push NULL
call dword ptr ProcAdd

push MB_OK
push addCap
push addTxt3
push NULL
call dword ptr [MessageBoxA]
}

FreeLibrary(hModule);
}



Cette discussion est classée dans : int, windows, push, msgboxtext, msgboxcaption


Répondre à ce message

Sujets en rapport avec ce message

Questions sur Windows et son mode protégé [ par Oeil_de_taupe ] Bonjour, J'utilise mes longue vacances pour me mettre à l'assembleur, et plus particulièrement la création d'exécutable assembleur pour Windows AT&T erreur de compilation etc... [ par maminovadu75 ] Bonjour, j'aimerais me mettre a l'assembleur mais j'ai quelque problème.voici mon code morceau de code pour trier un tableau de int : ( mélange de C/C Problème de restitution d'une chaîne. [ par Sawteeth ] Bonsoir. Je viens de débuter l'assembleur et j'ai tenté de faire un petit programme qui lit une chaîne au clavier et l'affiche à l'écran. Le problème progammation Driver en Assembleur sous WinXp [ par Mareck666 ] Boujour tous-le-monde, alors voila mon probléme, en faite j'aimerais programmer un driver sous ce chers Windaube (oups windows ) Xp, destiné a affiche Comment utiliser une DLL asm en C++ [ par Neo_Fr ] Salut tt le monde,Je suis tres intereser par le dll suivante: http://www.asmfr.com/code.aspx?ID=23840J'ai besoin de deux fonctions qui sont inclu dans MASM EXE2BIB Windows XP [ par aerotech ] Un gentil correspondant aurait-il un EXE2BIN.EXE pouvant fonctionner sous windows XP.En effet, MASM fonctionne très bien, ainsi que LINK, mais le exe2 conversion minuscule [ par safwensafwen ] C'est unprogramme qui fair la conversion en minuscule en utilisant la pile je n'arriv TSR & Détournement d'interrupt(ion) [ par ghuysmans99 ] bonjour à tous.j'ai fait un petit prog en asm 32bits pour dos mais il ne fonctionne pas ... reste à savoir pourquoi !!pourriez-vous m'aider ??;Change boot secteur [ par henri12 ] salutje viens de decompiler le boot secteur d une disquette de demarrageje voudrais savoir ou puis je mettre 15 octet de code que je veux faire execut afficher un caractère avec int 10h [ par thicdorb ] bonjour à tous,je suis débutant en assembleur et je commence par le début : afficher un caractèrej'utilise l'inteeruption BIOS 10h    mov    al, 'A'  


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,546 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales