begin process at 2010 03 20 12:56:16
  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


HTC Hero

Entre 550€ et 550€

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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,296 sec (4)

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