2 votes

Procédure externe dans FASM

J'ai essayé d'exporter une procédure depuis un fichier externe vers le programme d'assemblage principal, mais cela n'a pas fonctionné.

Voici le code de test du fichier externe :

; Export procedure Summa
format PE GUI 4.0

include 'win32a.inc'

section '.code' code readable executable

proc Summa
Public Summa
ret 2
endp

Et dans le fichier principal, j'essaie de joindre Summa :

format PE GUI 4.0

include 'win32a.inc'

section '.data' data readable writeable

extrn Summa as Summa : proc  

En compilant le fichier principal, j'obtiens l'erreur Illegal Instruction dans la ligne avec le mot clé extrn.

J'ai essayé de chercher sur le web, mais je n'ai pas eu la chance de trouver comment attacher une procédure externe dans FASM...

Merci !

2voto

Abyx Points 4776

Je vois que vous avez deux exécutables GUI, alors que signifie "exporter la procédure du fichier externe vers le programme d'assemblage principal" ?
Voulez-vous créer deux fichiers d'objets (.obj) et les relier ensuite entre eux ?
Ensuite, utilisez format MS COFF dans les deux fichiers, ajoutez les extrn y public et utiliser un linker (par exemple link.exe) pour construire le fichier .exe.

Lisez également fasm.pdf, section 2.4.3 "Common Object File Format".

0voto

user176692 Points 670

Avec PE Je crois que vous pouvez importer à partir d'une DLL comme ceci :

library kernel,'KERNEL32.DLL'

import kernel,\
    ExitProcess,'ExitProcess'

Si vous utilisez MS COFF, le style de liaison sera différent en fonction de votre bitness 32 ou 64 :

32 bits :

format MS COFF

section '.data' data readable writeable

extrn '__imp__Summa@0' as Summa:dword     

64 bits :

format MS64 COFF

section '.data' data readable writeable

extrn '__imp_Summa' as Summa:qword

Un excellent exemple de liaison en 32 bits : https://flatassembler.net/examples/msvc.zip

Vous pouvez également utiliser extrn avec ELF64, exemple Linux : https://2ton.com.au/rants_and_musings/gcc_integration.html

Exemple d'importation de fonction PE DLL : https://flatassembler.net/examples/quetannon.zip

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X