Tuesday 11 July 2017

Netwide Assembler Binário Opções


O Netwide Assembler: NASM O Netwide Disassembler, NDISASM O Netwide Disassembler é um pequeno programa complementar ao Netwide Assembler, NASM. Parecia uma vergonha ter um assembler x86, completo com uma tabela de instruções completa, e não fazer tanto uso dela quanto possível, então heres um disassembler que compartilha a tabela de instruções (e alguns outros bits de código) com NASM. O Netwide Disassembler não faz nada exceto para produzir desmontagens de arquivos de origem binários. NDISASM não tem qualquer compreensão de formatos de arquivo de objeto, como objdump. E ele não vai entender os arquivos DOS. EXE como o depuração. Apenas desmonta. Consulte a seção 1.3 para obter instruções de instalação. NDISASM, como NASM, tem uma página de manual que você pode querer colocar em algum lugar útil, se você estiver em um sistema Unix. Para desmontar um arquivo, normalmente você usará um comando do formulário NDISASM pode desmontar código de 16, 32 ou 64 bits com a mesma facilidade, desde que você se lembre de especificar com qual ele deve trabalhar. Se nenhuma opção - b estiver presente, NDISASM funciona no modo de 16 bits por padrão. A opção - u (para USE32) também invoca o modo de 32 bits. Mais duas opções de linha de comando são - r que informa o número da versão do NDISASM que você está executando e - h que fornece um breve resumo das opções da linha de comando. Para desmontar um ficheiro DOS correctamente, um desmontador deve assumir que a primeira instrução no ficheiro é carregada no endereço 0 x 100. Em vez de zero. NDISASM, que assume por padrão que qualquer arquivo que você dá é carregado em zero, portanto, precisa ser informado disto. A opção - o permite que você declare uma origem diferente para o arquivo que você está desmontando. Seu argumento pode ser expresso em qualquer um dos formatos numéricos NASM: decimal por padrão, se ele começa com ou 0x ou termina em H seu hex. Se termina em Q seu octal. E se termina em B seu binário. Assim, para desmontar um arquivo: vai fazer o truque. Suponha que você está desmontando um arquivo que contém alguns dados que não são código de máquina e, em seguida, contém algum código de máquina. NDISASM fielmente arado através da seção de dados, produzindo instruções de máquina onde quer que possa (embora a maioria deles vai olhar bizarro, e alguns podem ter prefixos incomuns, por exemplo, FS ou AX, 0x240A) e gerar instruções DB sempre tão frequentemente se o seu totalmente stumped . Em seguida, ele alcançará a seção de código. Supondo que o NDISASM acabou de gerar uma instrução de máquina estranha de parte da seção de dados, e sua posição de arquivo é agora um byte antes do início da seção de código. É perfeitamente possível que outra instrução espúria seja gerada, começando com o byte final da seção de dados e, em seguida, a primeira instrução correta na seção de código não será vista porque o ponto de partida saltou sobre ela. Isso não é realmente ideal. Para evitar isso, você pode especificar um ponto de sincronização, ou mesmo tantos pontos de sincronização como você gosta (embora NDISASM só pode lidar com 2147483647 pontos de sincronização internamente). A definição de um ponto de sincronização é a seguinte: NDISASM garante acertar pontos de sincronização exatamente durante a desmontagem. Se ele está pensando em gerar uma instrução que faria com que ele saltar sobre um ponto de sincronização, ele irá descartar essa instrução e saída um db em vez disso. Então ele vai começar a desmontagem exatamente a partir do ponto de sincronização, e assim você verá todas as instruções em sua seção de código. Os pontos de sincronização são especificados usando a opção - s: são medidos em termos da origem do programa e não da posição do arquivo. Portanto, se você quiser sincronizar após 32 bytes de um arquivo, você teria que fazer. Conforme mencionado acima, você pode especificar vários marcadores de sincronização, se necessário, apenas repetindo a opção - s. Suponha que você está desmontando o setor de inicialização de um disquete do DOS (talvez ele tenha um vírus, e você precisa entender o vírus para que você saiba que tipos de danos pode ter feito você). Normalmente, isso irá conter uma instrução JMP, em seguida, alguns dados e, em seguida, o resto do código. Portanto, há uma chance muito boa de NDISASM sendo desalinhados quando os dados termina eo código começa. Portanto, um ponto de sincronização é necessário. Por outro lado, por que você deve especificar o ponto de sincronização manualmente O que você faria para encontrar onde o ponto de sincronização seria, certamente, seria ler a instrução JMP e, em seguida, usar seu endereço de destino como um ponto de sincronização . Então, o NDISASM pode fazer isso para você A resposta, é claro, é sim: usando uma das opções também - a (para sincronização automática) ou - i (para sincronização inteligente) ativará o modo de sincronização automática. O modo de sincronização automática gera automaticamente um ponto de sincronização para qualquer instrução de salto ou de chamada relativa ao PC com referência direta que o NDISASM encontrar. (Uma vez que o NDISASM é um passo, se encontrar um salto relativo ao PC cujo alvo já tenha sido processado, não há muito que ele possa fazer sobre isso.) Somente os saltos relativos ao PC são processados, uma vez que um salto absoluto é através de um registrador (Caso em que NDISASM não sabe o que o registo contém) ou envolve um endereço de segmento (caso em que o código de destino isnt no mesmo segmento que NDISASM está trabalhando, e assim o ponto de sincronização não pode ser colocado em qualquer lugar útil). Para alguns tipos de arquivo, esse mecanismo colocará automaticamente pontos de sincronização em todos os lugares certos e o salvará de ter que colocar quaisquer pontos de sincronização manualmente. No entanto, deve ser salientado que o modo de sincronização automática não é garantido para capturar todos os pontos de sincronização, e você ainda pode ter que colocar alguns manualmente. O modo de sincronização automática não o impede de declarar pontos de sincronização manuais: apenas adiciona os gerados automaticamente aos que você fornece. É perfeitamente possível especificar - i e algumas opções - s. Outra advertência com o modo de sincronização automática é que, se por algum acaso desagradável alguma coisa em sua seção de dados deve desmontar para uma chamada relativa ao PC ou instrução de salto, NDISASM pode obedientemente colocar um ponto de sincronização em um lugar totalmente aleatório, por exemplo, no Meio de uma das instruções na seção de código. Então você pode acabar com uma desmontagem errada, mesmo se você usar a sincronização automática. Mais uma vez, não há muito que eu possa fazer sobre isso. Se você tiver problemas, você precisará usar pontos de sincronização manuais ou usar a opção - k (documentada abaixo) para suprimir a desmontagem da área de dados. A opção - e pula um cabeçalho no arquivo, ignorando os primeiros N bytes. Isso significa que o cabeçalho não é contado para o deslocamento de desmontagem: se você fornecer - e10 - o10. A desmontagem começará no byte 10 no arquivo, e isso será dado o deslocamento 10, não 20. A opção - k é fornecida com dois argumentos numéricos separados por vírgulas, o primeiro dos quais é um deslocamento de montagem e o segundo é um número de Bytes para ignorar. Isto irá contar os bytes ignorados para o deslocamento de montagem: o seu uso é suprimir a desmontagem de uma seção de dados que wouldnt conter qualquer coisa que você queria ver de qualquer maneira. Não existem erros conhecidos. No entanto, qualquer que você encontrar, com patches se possível, deve ser enviado para nasm-bugslists. sourceforge. Ou para o site de desenvolvedores nasm. us e bem tentar corrigi-los. Sinta-se livre para enviar contribuições e novos recursos, bem como montador privado CDN cached downloads disponíveis para clientes licenciados. Nunca experimente quebras de 404 novamente Saiba mais. Este pacote foi aprovado pelo moderador ferventcoder em 8182016. O Netwide Assembler, NASM, é um 80x86 e x86-64 montador projetado para a portabilidade e modularidade. Ele suporta uma variedade de formatos de arquivo de objeto, incluindo Linux e BSD a. out, ELF, COFF, Mach-O, Microsoft OBO de 16 bits, Win32 e Win64. Também produzirá arquivos binários simples. Sua sintaxe é projetada para ser simples e fácil de entender, semelhante ao Intels, mas menos complexo. Ele suporta todas as extensões arquitetônicas x86 atualmente conhecidas, e tem forte suporte para macros. Para instalar o NetWide Assembler, execute o seguinte comando a partir da linha de comando ou do PowerShell: C: gt choco install nasm Para atualizar o NetWide Assembler, execute o seguinte comando a partir da linha de comando ou do PowerShell: Casos em que o malware real é encontrado, os pacotes estão sujeitos a remoção. Software às vezes tem falsos positivos. Os moderadores não necessariamente validam a segurança do software subjacente, apenas que um pacote recupera o software do ponto de distribuição oficial e / ou valida o software embutido contra o ponto de distribuição oficial (onde os direitos de distribuição permitem a redistribuição). O Chocolatey Pro fornece proteção contra o tempo de execução contra possíveis malwares. Dependências Este pacote não tem dependências. Autor (es) do (s) Software Autor (es) Simon Tatham e Julian Hall e agora é mantido por uma equipe liderada por H. Peter Anvin. Copyright 1996-2016 NASM Authors - Todos os direitos reservados. Discussão para o pacote NetWide Assembler Regras básicas: Esta discussão é apenas sobre NetWide Assembler eo pacote NetWide Assembler. Se você tiver comentários para Chocolatey, entre em contato com o grupo google. Esta discussão irá transportar várias versões. Se você tiver um comentário sobre uma versão específica, observe que em seus comentários. Os mantenedores deste Pacote Chocolatey serão notificados sobre novos comentários que são publicados neste tópico Disqus, no entanto, não é uma garantia de que você receberá uma resposta. Se você não receber as respostas dos mantenedores depois de postar uma mensagem abaixo, faça o acompanhamento usando o link no lado esquerdo desta página ou siga este link para contatar os mantenedores. Se você ainda não ouvir nada de volta, siga o processo de triagem de pacotes. Diga-nos o que você gosta sobre o pacote ou NetWide Assembler, ou diga-nos o que precisa de melhoria. Compartilhe suas experiências com o pacote, ou configuração extra ou sugestões que você encontrou. Se você usar um url, o comentário será sinalizado para moderação até youve sido whitelisted. Disqus comentários moderados são aprovados em uma programação semanal, se não antes. Pode levar entre 1-5 dias para que seu comentário apareça. Seja o primeiro a saber sobre os próximos recursos, lançamentos de segurança e notícias sobre Chocolatey. nasm (1) - Linux man page nasm - o Netwide Assembler, um assembler 80x86 portátil nasm - arquivo de resposta - f formato - o outfile - l listfile opções. Nome do arquivo nasm - h nasm - v Descrição O comando nasm monta o nome do arquivo e direciona a saída para o outfile do arquivo, se especificado. Se outfile não for especificado, o nasm derivará um nome de arquivo de saída padrão do nome de seu arquivo de entrada, normalmente adicionando. o ou. obj ou removendo todas as extensões de um arquivo binário não processado. Caso contrário, o nome do arquivo de saída será nasm. out. OPTIONS - filename Faz com que nasm processe opções do nome do arquivo como se estivessem incluídas na linha de comando. - a Causa nasm para montar o arquivo de entrada especificado sem primeiro aplicar o pré-processador de macro. - D macrovalue Pre-define uma macro de linha única. - d macrovalue Igual à opção - D. - e Causa nasm para pré-processar o arquivo de entrada especificado e gravar a saída para stdout (ou o nome do arquivo de saída especificado) e não montar nada. - f formato Especifica o formato do arquivo de saída. Para ver uma lista de formatos de saída válidos, use a opção - hf. - g Causa nasm para gerar informações de depuração no formato selecionado Causa que o nasm saia imediatamente, após fornecer um resumo das opções de invocação. Mesmo que - h. Mas também lista todos os formatos de saída válidos. - I diretório Adiciona um diretório para o caminho de pesquisa para incluir arquivos. A especificação do diretório deve incluir a barra final, já que será diretamente anexada ao nome do arquivo de inclusão. - i Diretório Igual à opção - I. - l listfile Faz com que uma listagem de montagem seja direcionada para o arquivo fornecido, na qual a fonte original é exibida no lado direito (mais a fonte para arquivos incluídos e as expansões de macros de várias linhas) eo código gerado é mostrado em Hex no lado esquerdo. - M Faz com que nasm saia Dependências de estilo Makefile para stdout saída normal é suprimida. - O número otimizar desvios de ramificação (-O0 desativa, padrão). - o outfile Especifica um nome preciso para o arquivo de saída, substituindo o padrão de nasm s para determiná-lo. - P arquivo Especifica um arquivo a ser pré-incluído, antes que o arquivo de origem principal comece a ser processado. - p file Igual à opção - P. - r Faz com que nasm saia imediatamente, depois de exibir seu número de versão. (Obsoleto) Causa nasm para enviar suas mensagens de erro e ou texto de ajuda para stdout em vez de stderr. Causa nasm para montar em SciTech TASM modo compatível - U macro Desfaz uma macro de linha única. - u macro Igual à opção - U. - v Faz com que nasm saia imediatamente, depois de exibir seu número de versão. - w - foo Causa nasm para ativar ou desativar certas classes de mensagens de aviso, por exemplo - worphan-labels ou - w-macro-params - X formato especifica o formato de relatório de erro (gnu ou vc). - Z filename Faz com que nasm redirecione as mensagens de erro para filename. Esta opção existe para suportar sistemas operacionais nos quais o stderr não é facilmente redirecionado. SYNTAX Esta página de manual não descreve completamente a sintaxe do linguagem de montagem nasm s, mas fornece um resumo das diferenças de outros montadores. Registros não têm nenhum sinal de liderança, ao contrário do gás. E os registos de pilha de ponto flutuante são referidos como st0. St1. e assim por diante. As instruções de ponto flutuante podem usar o formulário de um único operando ou o duplo. Uma palavra-chave TO é fornecida assim, uma pode escrever fadd st1, st0 ou pode-se usar as formas alternativas de um único operando fadd para st1 O armazenamento não inicializado é reservado usando o RESB. RESW. RESD. RESQ. REST e RESO pseudo-opcodes, cada um tomando um parâmetro que dá o número de bytes, palavras, palavras duplas, quadwords ou palavras de dez bytes para reserva. Repetição de itens de dados não é feita pela palavra-chave DUP como visto em montadores DOS, mas pelo uso do prefixo TIMES, como este: message: times 3 db abc times 64-mensagem db 0 que define a seqüência de caracteres abcabcabc, Número direito de zero bytes para tornar o comprimento total até 64 bytes. As referências de símbolos são sempre entendidas como imediatas (isto é, o endereço do símbolo), a menos que sejam utilizados colchetes, em cujo caso o conteúdo da localização de memória é utilizado. Assim: mov ax, wordvar carrega AX com o endereço da variável wordvar, enquanto mov ax, es: wordvarbx todos referem-se ao conteúdo das localizações de memória. As sintaxes es mov ax, wordvar1 não são legais, embora o uso de um nome de registro de segmento como um prefixo de instrução seja válido e pode ser usado com instruções como LODSB que não podem ser substituídas de outra maneira. As constantes podem ser expressas numericamente na maioria dos formatos: um H, Q ou B à direita denota hex, octal ou binário, respectivamente, e um hexadecimal 0x ou denota também hex. Os zeros iniciais não são tratados especialmente. As constantes de caracteres podem ser incluídas em aspas simples ou duplas, não há nenhum caractere de escape. A ordenação é little-endian (invertida), de modo que a constante de caracteres abcd denota 0x64636261 e não 0x61626364. Os rótulos locais começam com um período, e sua localidade é concedida pelo montador que antecede o nome do símbolo não local anterior. Assim, declarar um rótulo. loop após um rótulo rotular realmente definiu um símbolo chamado label. loop. DIRECTIVES SECTION name ou SEGMENT nome faz com que nasm para direcionar todos os seguintes códigos para a seção nomeada. Os nomes das seções variam com o formato do arquivo de saída, embora a maioria dos formatos suporte os nomes. text..data e. bss. (A exceção é o formato obj, no qual todos os segmentos são definíveis pelo usuário.) O endereço ABSOLUTE faz com que nasm posicione seu ponto de montagem nocional em um endereço absoluto: então nenhum código ou dados podem ser gerados, mas você pode usar RESB. RESW e RESD para mover o ponto de montagem mais adiante, e você pode definir etiquetas. Assim, esta directiva pode ser usada para definir estruturas de dados. Quando você tiver terminado de fazer montagem absoluta, você deve emitir outra diretiva SECTION para retornar à montagem normal. BITS 16, BITS 32 ou BITS 64 alterna o modo de processador padrão para o qual nasm está gerando código: é equivalente a USE16 ou USE32 em montadores de DOS. Símbolo EXTERN e símbolo GLOBAL importar e exportar definições de símbolos, respectivamente, de e para outros módulos. Observe que a diretiva GLOBAL deve aparecer antes da definição do símbolo a que se refere. STRUC estrutura e ENDSTRUC. Quando usado para colchete um número de RESB. RESW ou instruções semelhantes, definir uma estrutura de dados. Além de definir os deslocamentos dos membros da estrutura, a construção também define um símbolo para o tamanho da estrutura, que é simplesmente o nome da estrutura com o tamanho aderido até o final. DIRECTIVAS ESPECÍFICAS DO FORMATO O endereço ORG é usado pelo formato de saída binária de formato plano bin e especifica o endereço no qual o código de saída será eventualmente carregado. GRUPO grpname seg1 seg2. É usado pelo formato de saída obj (Microsoft 16 bits) e define grupos de segmentos. Esse formato também usa MAIÚSCULAS. Que direciona que todos os segmentos, grupos e nomes de símbolos de saída para o arquivo de objeto deve estar em maiúsculas. Observe que a montagem real ainda é sensível a maiúsculas e minúsculas. LIBRARY libname é usado pelo formato de saída rdf e faz com que um registro de dependência seja gravado no arquivo de saída, o que indica que o programa requer uma certa biblioteca para ser executado. MACRO PREPROCESSOR As macros de uma linha são definidas usando os comandos define ou idefine, de forma semelhante ao pré-processador C. Eles podem ser sobrecarregados com relação ao número de parâmetros, embora a definição de uma macro sem parâmetros impede a definição de qualquer macro com o mesmo nome tomando parâmetros e vice-versa. Define define macros cujos nomes correspondem a maiúsculas e minúsculas, enquanto que idefine define maiúsculas e minúsculas macros. As macros de várias linhas são definidas usando macro e imacro (a distinção é a mesma que entre definir e idefine), cuja sintaxe é a seguinte: nome da macro minprm - maxprm. nolist defaults ltsome linhas de macro expansão textgt endmacro Novamente, essas macros podem Ser sobrecarregado. O sinal mais à direita indica que todos os parâmetros após o último get subsumed, com suas vírgulas de separação, no último parâmetro. A parte padrão pode ser usada para especificar padrões para parâmetros de macro não especificados após minparam. Endm é um sinônimo válido para endmacro. Para se referir aos parâmetros de macro dentro de uma expansão de macro, use 1. 2 e assim por diante. Você também pode impor que um parâmetro de macro deve conter um código de condição usando 1. E você pode inverter o código de condição usando -1. Você também pode definir um rótulo específico para uma macro invocação prefixando-o com um sinal duplo. Os arquivos podem ser incluídos usando a diretiva include, que funciona como C. O pré-processador possui uma pilha de contexto, que pode ser usada por uma macro para armazenar informações que uma posterior recuperará. Você pode empurrar um contexto na pilha usando push. Remova um usando pop. E alterar o nome do contexto superior (sem perturbar quaisquer definições associadas) usando repl. As etiquetas e macros de definição específicas para o contexto superior podem ser definidas pelo prefixo de seus nomes com, e coisas específicas para o próximo contexto para baixo com, e assim por diante. A montagem condicional é feita por meio de ifdef. Ifndef. Else e endif como em C. (Exceto que ifdef pode aceitar vários nomes de macros putativos e avaliará TRUE se qualquer deles for definido.) Além disso, as diretivas ifctx e ifnctx podem ser usadas para condicionar o nome do contexto superior Na pilha de contexto. O conjunto óbvio de diretivas else-if, elifdef. Elifndef. Elifctx e elifnctx também são suportados. Informe os bugs através da função de rastreador de bugs em nasm. sourceforge. org. Referenciado por

No comments:

Post a Comment