Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/02/2016, à 22:54

salax96

Assembleur en X86 avec NASM sur du intel i386

Bonsoir , je voudrais avoir de l' aide pour un problème qui va me rendre littéralement fou .
Je reçoit un message d' avertissement.

ps (je suis un débutant)      smile




mini_332412Capture56.jpg

Hors ligne

#2 Le 16/02/2016, à 23:34

derderder

Re : Assembleur en X86 avec NASM sur du intel i386

Première chose, copie colle ton message d'erreur dans des balises code plutôt que de faire un screenshot. Deuxième chose, poste ton code, ma boule de cristal ne marche pas toujours bien. Troisième chose, exporte principal en tant que symbole global.
En nasm:

[GLOBAL principal]

En gas:

.global principal

Hors ligne

#3 Le 17/02/2016, à 11:54

salax96

Re : Assembleur en X86 avec NASM sur du intel i386

Voici le prog :



; monProg.asm 

global main       

section .text
main: 

    nop             ; ne fait rien

    mov eax, 234	
    mov al,  -1         
    mov ah,  0xA2    
    mov bx,  0xA2FF ; bx possède la même valeur que ax
    mov ecx, 123456    
    mov dh,  100q
    mov dl,  10001010b
    mov ah,  0x0B   ; on écrase l'ancien contenu de ah             
    mov al,  -130
    mov al,  'd'    ; al reçoit le code ASCII du caractère 'd'
    ; mov eip, 0      ; erreur de compilation : eip inaccessible

    ; fin
    mov eax, 1
    mov ebx, 0
    int 0x80






Message d' erreur :

g4200@g4200-VirtualBox:~/Téléchargements$ ls
monProg  monProg.asm  monProg.o
g4200@g4200-VirtualBox:~/Téléchargements$ ld -o monProg -e principal -m elf_i386 monProg.o
ld: AVERTISSEMENT: ne peut trouver le symbole d'entrée principal; utilise par défaut 0000000008048060
g4200@g4200-VirtualBox:~/Téléchargements$



Merci pour ton aide smile


Modération : merci à l'avenir d'utiliser les balises code (explications ici).

Dernière modification par cqfd93 (Le 17/02/2016, à 17:19)

Hors ligne

#4 Le 17/02/2016, à 14:08

Nasman

Re : Assembleur en X86 avec NASM sur du intel i386

Je ne sais pas si cela va t'aider mais j'avais fait quelques petits test de programmes assembleur 32 et 64 bits avec Nasm.
Les voici:

Version 32 bits

; 32-bit sys_write call in NASM
; nasm -f elf32 -o HelloWorld_32bits.o HelloWorld_32bits.asm
; ld -o HelloWorld_32bits HelloWorld_32bits.o

global _start			; global entry point export for ld
 
section .text
_start:
 
	; sys_write(stdout, message, length)
 
	mov eax, 4		; sys_write
	mov ebx, 1		; stdout
	mov ecx, message	; message address (defined in the .data section)
	mov edx, length		; message string length (also in .data)
	int 80h			; 32-bit syscall
 
	; sys_exit(return_code)
 
	mov eax, 1		; sys_exit syscall
	mov ebx, 0		; return 0 (success)
	int 80h
 

section .data

message: db 'Hello, world!',0x0A    ; message and newline
length:	equ    $-message        ; NASM definition pseudo-instruction

Version 64 bits

; 64-bit "Hello World!" in Linux NASM
; nasm -f elf64 -o HelloWorld_64bits.o HelloWorld_64bits.asm
; ld -o HelloWorld_64bits HelloWorld_64bits.o

global _start			; global entry point export for ld
 
section .text
_start:
 
	; sys_write(stdout, message, length)
 
	mov rax, 1		; sys_write
	mov rdi, 1		; stdout
	mov rsi, message	; message address
	mov rdx, length		; message string length
	syscall
 
	; sys_exit(return_code)
 
	mov rax, 60		; sys_exit
	mov rdi, 0		; return 0 (success)
	syscall
 

section .data

message: db 'Hello, world!',0x0A    ; message and newline
length:	equ    $-message        ; NASM definition pseudo-instruction

PC fixe sous Bionic 64 bits et portable avec Focal 64 bits

Hors ligne

#5 Le 17/02/2016, à 17:16

derderder

Re : Assembleur en X86 avec NASM sur du intel i386

Ton problème est simple, tu dis au linker de prendre comme entrée le symbole "principal", or ce dernier n'existe pas. Tu dois soit renommer le "main" de ton programme en "principal", soit ( ce que te conseille de faire ) passer -e main au linker pour dire que l'entrée de ton programme est le symbole main.

Hors ligne