Ir para conteúdo

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


Aurea Matsumura

Posts Recomendados

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

Link para o comentário
Compartilhar em outros sites

É 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

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 para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...