Aurea Matsumura Posted October 10, 2020 at 08:55 PM Share Posted October 10, 2020 at 08:55 PM 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 to comment Share on other sites More sharing options...
fredericopissarra Posted October 10, 2020 at 09:30 PM Share Posted October 10, 2020 at 09:30 PM Tente a opção -m32 no GCC. Link to comment Share on other sites More sharing options...
Aurea Matsumura Posted October 10, 2020 at 10:41 PM Author Share Posted October 10, 2020 at 10:41 PM Oi. Tentei com a opção -m32 mas tb não funciona...o ´únco jeito que achei de funcionar foi trocando os registradores para os de 64-bits, mas a proposta que tenho é que obrigatoriamente deve ser em assembly-32. Tem alguma outra ideia ? Obrigada pela ajuda !!1 Link to comment Share on other sites More sharing options...
Aurea Matsumura Posted October 10, 2020 at 10:48 PM Author Share Posted October 10, 2020 at 10:48 PM em um computador de 32-bits o makefile roda e consigo gerar o executavel, porem a proposta que tenho é que esses arquivos serão compilados em uma maquina 64-bits e o executável será testado na maquina de 64-bits Link to comment Share on other sites More sharing options...
Fernando Mercês Posted October 10, 2020 at 11:05 PM Share Posted October 10, 2020 at 11:05 PM É 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 More sharing options...
Aurea Matsumura Posted October 11, 2020 at 01:21 AM Author Share Posted October 11, 2020 at 01:21 AM 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 More sharing options...
Aurea Matsumura Posted October 11, 2020 at 04:04 AM Author Share Posted October 11, 2020 at 04:04 AM ok. Funcionou !! obrigada Link to comment Share on other sites More sharing options...
Fernando Mercês Posted October 11, 2020 at 04:07 AM Share Posted October 11, 2020 at 04:07 AM 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. Link to comment Share on other sites More sharing options...
Aurea Matsumura Posted October 11, 2020 at 04:08 AM Author Share Posted October 11, 2020 at 04:08 AM 1 minute ago, Fernando Mercês said: 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. obrigada !!! Link to comment Share on other sites More sharing options...
Aurea Matsumura Posted October 11, 2020 at 04:15 AM Author Share Posted October 11, 2020 at 04:15 AM o move eax eu retirei. o and eu fiz para limpar os últimos 4 bits do endereço da ESP. É necessario mesmo ? seria and 0xffffff0, esp ? Obriagada Link to comment Share on other sites More sharing options...
fredericopissarra Posted October 11, 2020 at 09:37 AM Share Posted October 11, 2020 at 09:37 AM 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 More sharing options...
Fernando Mercês Posted October 11, 2020 at 02:19 PM Share Posted October 11, 2020 at 02:19 PM 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 More sharing options...
Aurea Matsumura Posted October 11, 2020 at 03:20 PM Author Share Posted October 11, 2020 at 03:20 PM ola. desculpem-se. Consegui resolver o problema. muito obrigada pela ajuda Link to comment Share on other sites More sharing options...
fredericopissarra Posted October 11, 2020 at 09:04 PM Share Posted October 11, 2020 at 09:04 PM 5 horas atrás, Aurea Matsumura disse: ola. desculpem-se. Consegui resolver o problema. muito obrigada pela ajuda Tá.. eu me desculpo... pelo quê? ? Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.