Jump to content

criar .o de um codigo assembly x86 32 bits para rodar um computador 64 bit


Aurea Matsumura
 Share

Recommended Posts

Ola. Podem me ajudar ?

Tenho dois arquivos: teste.c(que contem main() e uma chamada para função check()), e um arquivo check_asm.s que contem o codigo assembly 32bits.

para gerar os check_asm.o  e teste.o uso os comandos

 

porem surge erro no nasm " a arquitetura 386 do arquivo de entrada "check_asm.o é incompatível com a saída de i386:x86-64"

 

alguém sabe como corrigir o erro ? muito obrigada

Edited by Aurea Matsumura
correction
Link to comment
Share on other sites

  • Administrators

É um Linux de 64-bits esse ambiente em que está tentando compilar? Se sim, qual distro? Para usar a opção que o Frederico sugeriu, em geral tem que instalar o pacote gcc-multilib:

sudo apt install gcc-multilib

Depois:

nasm -felf32 check_asm.s
gcc -m32 -c teste.c -o teste.o
gcc -m32 teste.o check_asm.o -o teste_final

Se não funcionar, copia e cola a linha de comando que você digitou e o erro exato aqui pra gente. ?

Abraço.

Link to comment
Share on other sites

4 horas atrás, Fernando Mercês disse:

É um Linux de 64-bits esse ambiente em que está tentando compilar? Se sim, qual distro? Para usar a opção que o Frederico sugeriu, em geral tem que instalar o pacote gcc-multilib:


sudo apt install gcc-multilib

Depois:


nasm -felf32 check_asm.s
gcc -m32 -c teste.c -o teste.o
gcc -m32 teste.o check_asm.o -o teste_final

Se não funcionar, copia e cola a linha de comando que você digitou e o erro exato aqui pra gente. ?

Abraço.

ufaaa! Fernado, funcionou !! obrigada Fernando !!! Obrigada Frederico !!

Poderiam me ajudar com outra dúvida ?

codifiquei um _start que so prepara os argumentos argc e argv, define o alinhamento da pilha e chama main(), depois encerra com exit, mas o comando

nasm _start.s -felf32 

dá msg "_start.s:9 : error invalid combination of opmode and operands."

section .text
global _start
extern main

_start:
       xor ebp,epb
       pop esi
      mov esp,ecx
      and 0xfffffff0, esp
      push eax
      push esp
      push edx
      push ecx
      push esi
      call main
      mov eax
      int 0x80

   sabem o que pode ser ?

Link to comment
Share on other sites

5 horas atrás, Fernando Mercês disse:

Desocultei suas mensagens para a thread fazer sentido. ?

Bom, você já deve ter percebido que os operadores estão na ordem inversa no AND no teu código e que tem um MOV EAX solto ali na penúltima instrução.

Valeu.

Para mim parece ainda estar "oculto", já que não vejo nenhuma referência à código fonte por aqui.

Link to comment
Share on other sites

  • Administrators
4 horas atrás, fredericopissarra disse:

Para mim parece ainda estar "oculto", já que não vejo nenhuma referência à código fonte por aqui.

Acho que ela ocultou de novo, mas já pus pra mostar.

@Aurea Matsumura acho que você tá "desaprovando" seus posts e isso faz com que a gente não veja o código. Você tá fazendo de propósito?

Abraços!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...