Accueil > Forum > > > > mettre de l'assembleur en ligne sous Visual C++
mettre de l'assembleur en ligne sous Visual C++
vendredi 21 février 2003 à 17:58:06 |
mettre de l'assembleur en ligne sous Visual C++

alain34270
|
alain Bonjour, Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation. Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro). Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ? Merci d'avance ! alain
|
|
vendredi 21 février 2003 à 18:34:07 |
Re : mettre de l'assembleur en ligne sous Visual C++

BruNews
|
Salut, en VC++ tu fais une func en asm pur sans probleme exemple, on fait a = a + b * -1: __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b) { __asm { mov eax, [esp+8] ; b mov ecx, [esp+4] neg eax inc eax add [ecx], eax ret 8 } } bien sur toi tu feras un truc utile, juste pour montrer. Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux. Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab. Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl. ciao...
------------------------------- Réponse au message : -------------------------------
> alain > > Bonjour, > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation. > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro). > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ? > > Merci d'avance ! > > alain >
|
|
vendredi 21 février 2003 à 19:14:13 |
Re : mettre de l'assembleur en ligne sous Visual C++

GoldenEye
|
------------------------------- Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b  Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP. ------------------------------- > Salut, > en VC++ tu fais une func en asm pur sans probleme > exemple, on fait a = a + b * -1: > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b) > { > __asm { > mov eax, [esp+8] ; b > mov ecx, [esp+4] > neg eax > inc eax > add [ecx], eax > ret 8 > } > } > bien sur toi tu feras un truc utile, juste pour montrer. > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux. > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab. > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl. > ciao... > > ------------------------------- > Réponse au message : > ------------------------------- > > > alain > > > > Bonjour, > > > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation. > > > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro). > > > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ? > > > > Merci d'avance ! > > > > alain > > >
|
|
vendredi 21 février 2003 à 19:49:46 |
Re : mettre de l'assembleur en ligne sous Visual C++

BruNews
|
le 8 apres ret est le nombre d'octets qui ont ete "pushes" par l'appelant. Il y avait dans exemple 2 params donc 8 octets. Donc ret 8 fera: mov eip, [esp] add esp, 8 Ce ret est obligatoire cause __declspec(naked) qui interdit toute instruction C du genre return etc... Le nbr pour ret cause __stdcall, donc a l'appele de remonter ESP. la prochaine adr instruction est toujours mise en ESP. C'est pour cela qu'on recup le 1er param en [esp+4] etc.. le prog peut continuer car il a recup adr next instruction. Tu peux mettre int value sans probleme, a toi de coder value correctement. ciao... ------------------------------- Réponse au message : ------------------------------- > > > > > ------------------------------- > Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b  > Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP. > ------------------------------- > > > Salut, > > en VC++ tu fais une func en asm pur sans probleme > > exemple, on fait a = a + b * -1: > > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b) > > { > > __asm { > > mov eax, [esp+8] ; b > > mov ecx, [esp+4] > > neg eax > > inc eax > > add [ecx], eax > > ret 8 > > } > > } > > bien sur toi tu feras un truc utile, juste pour montrer. > > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux. > > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab. > > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl. > > ciao... > > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > > alain > > > > > > Bonjour, > > > > > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation. > > > > > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro). > > > > > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ? > > > > > > Merci d'avance ! > > > > > > alain > > > > > >
|
|
samedi 22 février 2003 à 08:24:18 |
Re : mettre de l'assembleur en ligne sous Visual C++

alain34270
|
alain merci pour tous ces détails. le 8 après le ret sert à dépiler 8 octets avant de faire le ret. alain ------------------------------- Réponse au message : ------------------------------- > > > > > ------------------------------- > Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b  > Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP. > ------------------------------- > > > Salut, > > en VC++ tu fais une func en asm pur sans probleme > > exemple, on fait a = a + b * -1: > > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b) > > { > > __asm { > > mov eax, [esp+8] ; b > > mov ecx, [esp+4] > > neg eax > > inc eax > > add [ecx], eax > > ret 8 > > } > > } > > bien sur toi tu feras un truc utile, juste pour montrer. > > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux. > > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab. > > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl. > > ciao... > > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > > alain > > > > > > Bonjour, > > > > > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation. > > > > > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro). > > > > > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ? > > > > > > Merci d'avance ! > > > > > > alain > > > > > >
|
|
samedi 22 février 2003 à 17:40:28 |
Re : mettre de l'assembleur en ligne sous Visual C++

alain34270
|
alain Salut. Maintenant, j'arrive sans problème à mettre de l'asm dans un programme C (merci beaucoup). Mon (autre) problème, c'est que je dois lire des secteurs qui ne font partie d'aucune partition (puisqu'elle n'existe plus :-( ). Je dois donc utiliser l'int 13h étendu. Or, le DAP de l'int 13 étendu n'accepte que des adressages 16 bits (à ma connaissance). Y'aurait pas moyen de créer un petit environnement 16 bits en C ? ou Y'aurait-il une autre solution simple ? Merci ciao ------------------------------- Réponse au message : ------------------------------- > le 8 apres ret est le nombre d'octets qui ont ete "pushes" par l'appelant. > Il y avait dans exemple 2 params donc 8 octets. > Donc ret 8 fera: > mov eip, [esp] > add esp, 8 > Ce ret est obligatoire cause __declspec(naked) qui interdit toute instruction C du genre return etc... > Le nbr pour ret cause __stdcall, donc a l'appele de remonter ESP. > la prochaine adr instruction est toujours mise en ESP. C'est pour cela qu'on recup le 1er param en [esp+4] etc.. > le prog peut continuer car il a recup adr next instruction. > Tu peux mettre int value sans probleme, a toi de coder value correctement. > ciao... > > ------------------------------- > Réponse au message : > ------------------------------- > > > > > > > > > > > ------------------------------- > > Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b  > > Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP. > > ------------------------------- > > > > > Salut, > > > en VC++ tu fais une func en asm pur sans probleme > > > exemple, on fait a = a + b * -1: > > > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b) > > > { > > > __asm { > > > mov eax, [esp+8] ; b > > > mov ecx, [esp+4] > > > neg eax > > > inc eax > > > add [ecx], eax > > > ret 8 > > > } > > > } > > > bien sur toi tu feras un truc utile, juste pour montrer. > > > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux. > > > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab. > > > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl. > > > ciao... > > > > > > ------------------------------- > > > Réponse au message : > > > ------------------------------- > > > > > > > alain > > > > > > > > Bonjour, > > > > > > > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation. > > > > > > > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro). > > > > > > > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ? > > > > > > > > Merci d'avance ! > > > > > > > > alain > > > > > > > > > >
|
|
samedi 22 février 2003 à 17:42:07 |
Re : mettre de l'assembleur en ligne sous Visual C++

alain34270
|
alain ------------------------------- Réponse au message : ------------------------------- > > alain > > Salut. > > Maintenant, j'arrive sans problème à mettre de l'asm dans un programme C (merci beaucoup). > > Mon (autre) problème, c'est que je dois lire des secteurs qui ne font partie d'aucune partition (puisqu'elle n'existe plus :-( ). > Je dois donc utiliser l'int 13h étendu. > Or, le DAP de l'int 13 étendu n'accepte que des adressages 16 bits (à ma connaissance). > > Y'aurait pas moyen de créer un petit environnement 16 bits en C ? ou > Y'aurait-il une autre solution simple ? > > Merci > ciao > ------------------------------- > Réponse au message : > ------------------------------- > > > le 8 apres ret est le nombre d'octets qui ont ete "pushes" par l'appelant. > > Il y avait dans exemple 2 params donc 8 octets. > > Donc ret 8 fera: > > mov eip, [esp] > > add esp, 8 > > Ce ret est obligatoire cause __declspec(naked) qui interdit toute instruction C du genre return etc... > > Le nbr pour ret cause __stdcall, donc a l'appele de remonter ESP. > > la prochaine adr instruction est toujours mise en ESP. C'est pour cela qu'on recup le 1er param en [esp+4] etc.. > > le prog peut continuer car il a recup adr next instruction. > > Tu peux mettre int value sans probleme, a toi de coder value correctement. > > ciao... > > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > > > > > > > > > > > > > > ------------------------------- > > > Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b  > > > Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP. > > > ------------------------------- > > > > > > > Salut, > > > > en VC++ tu fais une func en asm pur sans probleme > > > > exemple, on fait a = a + b * -1: > > > > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b) > > > > { > > > > __asm { > > > > mov eax, [esp+8] ; b > > > > mov ecx, [esp+4] > > > > neg eax > > > > inc eax > > > > add [ecx], eax > > > > ret 8 > > > > } > > > > } > > > > bien sur toi tu feras un truc utile, juste pour montrer. > > > > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux. > > > > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab. > > > > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl. > > > > ciao... > > > > > > > > ------------------------------- > > > > Réponse au message : > > > > ------------------------------- > > > > > > > > > alain > > > > > > > > > > Bonjour, > > > > > > > > > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation. > > > > > > > > > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro). > > > > > > > > > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ? > > > > > > > > > > Merci d'avance ! > > > > > > > > > > alain > > > > > > > > > > > > > > >
|
|
samedi 22 février 2003 à 17:57:50 |
Re : mettre de l'assembleur en ligne sous Visual C++

BruNews
|
si tu as encore un compilo C 16 bits alors oui sinon neni. Solution envisageable (et meme preconisee pas MS si si), tu fais une dll ou un exe 16 bits avec masm (ou autre) et tu peux le charger depuis ton prog 32 bits. Moi je prefere exe mais c'est selon, exe aura avantage de tourner en processus separe et pas risque de planter prog appelant. ciao... ------------------------------- Réponse au message : ------------------------------- > > alain > > Salut. > > Maintenant, j'arrive sans problème à mettre de l'asm dans un programme C (merci beaucoup). > > Mon (autre) problème, c'est que je dois lire des secteurs qui ne font partie d'aucune partition (puisqu'elle n'existe plus :-( ). > Je dois donc utiliser l'int 13h étendu. > Or, le DAP de l'int 13 étendu n'accepte que des adressages 16 bits (à ma connaissance). > > Y'aurait pas moyen de créer un petit environnement 16 bits en C ? ou > Y'aurait-il une autre solution simple ? > > Merci > ciao > ------------------------------- > Réponse au message : > ------------------------------- > > > le 8 apres ret est le nombre d'octets qui ont ete "pushes" par l'appelant. > > Il y avait dans exemple 2 params donc 8 octets. > > Donc ret 8 fera: > > mov eip, [esp] > > add esp, 8 > > Ce ret est obligatoire cause __declspec(naked) qui interdit toute instruction C du genre return etc... > > Le nbr pour ret cause __stdcall, donc a l'appele de remonter ESP. > > la prochaine adr instruction est toujours mise en ESP. C'est pour cela qu'on recup le 1er param en [esp+4] etc.. > > le prog peut continuer car il a recup adr next instruction. > > Tu peux mettre int value sans probleme, a toi de coder value correctement. > > ciao... > > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > > > > > > > > > > > > > > ------------------------------- > > > Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b  > > > Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP. > > > ------------------------------- > > > > > > > Salut, > > > > en VC++ tu fais une func en asm pur sans probleme > > > > exemple, on fait a = a + b * -1: > > > > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b) > > > > { > > > > __asm { > > > > mov eax, [esp+8] ; b > > > > mov ecx, [esp+4] > > > > neg eax > > > > inc eax > > > > add [ecx], eax > > > > ret 8 > > > > } > > > > } > > > > bien sur toi tu feras un truc utile, juste pour montrer. > > > > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux. > > > > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab. > > > > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl. > > > > ciao... > > > > > > > > ------------------------------- > > > > Réponse au message : > > > > ------------------------------- > > > > > > > > > alain > > > > > > > > > > Bonjour, > > > > > > > > > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation. > > > > > > > > > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro). > > > > > > > > > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ? > > > > > > > > > > Merci d'avance ! > > > > > > > > > > alain > > > > > > > > > > > > > > >
|
|
lundi 24 février 2003 à 04:31:08 |
Re : mettre de l'assembleur en ligne sous Visual C++

alain34270
|
alain OK, merci pour tout, bruNews. Je vais faire un petit prog exe en assembleur pour lire les secteurs... ciao. ------------------------------- Réponse au message : ------------------------------- > si tu as encore un compilo C 16 bits alors oui sinon neni. > Solution envisageable (et meme preconisee pas MS si si), tu fais une dll ou un exe 16 bits avec masm (ou autre) et tu peux le charger depuis ton prog 32 bits. Moi je prefere exe mais c'est selon, exe aura avantage de tourner en processus separe et pas risque de planter prog appelant. > ciao... > > ------------------------------- > Réponse au message : > ------------------------------- > > > > > alain > > > > Salut. > > > > Maintenant, j'arrive sans problème à mettre de l'asm dans un programme C (merci beaucoup). > > > > Mon (autre) problème, c'est que je dois lire des secteurs qui ne font partie d'aucune partition (puisqu'elle n'existe plus :-( ). > > Je dois donc utiliser l'int 13h étendu. > > Or, le DAP de l'int 13 étendu n'accepte que des adressages 16 bits (à ma connaissance). > > > > Y'aurait pas moyen de créer un petit environnement 16 bits en C ? ou > > Y'aurait-il une autre solution simple ? > > > > Merci > > ciao > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > > le 8 apres ret est le nombre d'octets qui ont ete "pushes" par l'appelant. > > > Il y avait dans exemple 2 params donc 8 octets. > > > Donc ret 8 fera: > > > mov eip, [esp] > > > add esp, 8 > > > Ce ret est obligatoire cause __declspec(naked) qui interdit toute instruction C du genre return etc... > > > Le nbr pour ret cause __stdcall, donc a l'appele de remonter ESP. > > > la prochaine adr instruction est toujours mise en ESP. C'est pour cela qu'on recup le 1er param en [esp+4] etc.. > > > le prog peut continuer car il a recup adr next instruction. > > > Tu peux mettre int value sans probleme, a toi de coder value correctement. > > > ciao... > > > > > > ------------------------------- > > > Réponse au message : > > > ------------------------------- > > > > > > > > > > > > > > > > > > > > > > > ------------------------------- > > > > Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b  > > > > Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP. > > > > ------------------------------- > > > > > > > > > Salut, > > > > > en VC++ tu fais une func en asm pur sans probleme > > > > > exemple, on fait a = a + b * -1: > > > > > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b) > > > > > { > > > > > __asm { > > > > > mov eax, [esp+8] ; b > > > > > mov ecx, [esp+4] > > > > > neg eax > > > > > inc eax > > > > > add [ecx], eax > > > > > ret 8 > > > > > } > > > > > } > > > > > bien sur toi tu feras un truc utile, juste pour montrer. > > > > > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux. > > > > > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab. > > > > > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl. > > > > > ciao... > > > > > > > > > > ------------------------------- > > > > > Réponse au message : > > > > > ------------------------------- > > > > > > > > > > > alain > > > > > > > > > > > > Bonjour, > > > > > > > > > > > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation. > > > > > > > > > > > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro). > > > > > > > > > > > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ? > > > > > > > > > > > > Merci d'avance ! > > > > > > > > > > > > alain > > > > > > > > > > > > > > > > > > > > >
|
|
Cette discussion est classée dans : ligne, visual, partir, assembleur, alain
Répondre à ce message
Sujets en rapport avec ce message
envoi de sms a partir de vicual c++ [ par initialb ]
je souhaiterai savoir s'il existe un programme me permettant d'envoyer des sms via visual c++ ( si oui, merci de bien vouloir me repondre, et n'hesite
Lire dans un fichier ligne par ligne [ par curator68 ]
Voilà, j'ai un fichier sur mon disque, et j'aimerai lire le contenu ligne par ligne dans mon programme. J'utilise Visual C++ de Visual Studio 6.0 sp5.
[Visual C++] Aide fichiers exe [ par WarioZ ]
bonjour a tous,je débute en C++ et j'ai un probleme avec les fichiers exe que je cree a partir de mes codes sources...Quand je les execute a partir de
Ligne de commande [ par samki ]
Bonjour,j'aimerai savoir comment je pourrai lancer une ligne de commande à partir de mon code C++.Je veux gérer un logiciel à partir d'une unterface q
16 bit sous visual C++ [ par vangeurmasker ]
Je cherche a utiliser le mode graphique de DOS par la commande :_asm{ mov ax,0x13 int 0x10}Pour ceux qui ne connaissent pas _asm permet de met
[Visual C++]Problème avec SendMessage(.....GETTEXT,i,...) [ par goutbouyo ]
J'ai juste un petit problème avec ça :SendMessage(hCtrl,LB_GETTEXT,i, (LPARAM)(LPCTSTR)chaine);En fait c'est pour obtenir les mots d'une liste ligne p
Recherche par ligne -> repère [ par Raphy2145 ]
Bonjour,Je travaille sur une lecture de fichier par ligne, et j'ai besoin de faire une deuxième lecture à partir de la ligne en cours...Pour détailler
assembleur en ligne avec gcc [ par nalk_deen_mook ]
Bonjour j'aurais aimé savoir pourquoi lorsque je compile ce bout de code, j'ai une erreur de segmentation merci d'avance#include int main(){ int a=10
Assembleur inline avec Microsoft Visual C++ Toolkit 2003 [ par skirby ]
Bonjour,J'aurais voulu savoir si il était possible de faire de l'assembleur inline avec le compilateur gratuit Microsoft Visual C++ Toolkit 2003 ?J'ut
Ca fonctionne qu'à partir de Visual C, pas avec l'exe ! [ par schn ]
Bonjour,J'ai une appli qui tourne sous Visual C++. net (appli MFC)J'utilise une bdd ACCESS.Tout fonctionne bien lorsque j'execute mon code à partir de
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|