Camada inferior do iOS - exploração de montagem (1)

prefácio

  Como programadores, fomos expostos a mais ou menos em nosso processo de desenvolvimento e aprendizado, então 汇编pensamos sobre 汇编o que é e o que podemos fazer se dominarmos a montagem?
Simplificando, é o processo de 汇编语言traduzir em algo que um computador pode entender 机器语言, o que chamamos de 汇编. Aprender a montar permite que você faça engenharia reversa e entenda os princípios dos computadores. Uma parte muito importante no processo de análise reversa é 静态分析que um APP pode ser executado em um celular porque um arquivo executável é instalado no celular, 静态分析que é essencialmente um arquivo binário. Para analisar binário você precisa saber 汇编.

O desenvolvimento da linguagem assembly

  • O que é 机器语言?

  Na verdade, é composto de 0s e 1s 机器指令. : 0100 0000, : 0100 1000, : 1111 0111 1110 0000, : 1111 0111 1111 0000. 汇编语言(linguagem assembly), que usa mnemônicos em vez de linguagem de máquina. :INC EAX via compilador 0100 0000, :DEC EAX via compilador 0100 1000, :MUL EAX via compilador 1111 0111 1110 0000, :DIV EAX via compilador 1111 0111 1111 0000. Como o código que desenvolvemos diariamente é transformado no dispositivo terminal?   Através da figura acima, você pode ver o processo de conversão do código de forma bem intuitiva. Devemos também perceber que existe uma correspondência um-para-um entre linguagem assembly e linguagem de máquina, e cada instrução de máquina tem sua contraparte 汇编指令. A linguagem assembly pode ser obtida compilando 机器语言e 机器语言desmontando 汇编语言. Linguagens de alto nível podem ser compiladas em linguagem assembly e linguagem de máquina, mas linguagem assembly\machine language é quase impossível de restaurar para linguagens de alto nível.

  • Características da linguagem assembly

  Ele pode acessar e controlar diretamente vários dispositivos de hardware, como 存储器, CPUetc., que podem maximizar a função do hardware. O código do objeto é curto, ocupa menos memória e é executado rapidamente. As instruções de montagem são os mnemônicos das instruções de máquina, que correspondem um a um com as instruções de máquina. Cada um CPUtem seu próprio conjunto de instruções de máquina\conjunto de instruções de montagem, portanto, a linguagem assembly não é portátil. Insensível a maiúsculas e minúsculas, como mov e MOV são os mesmos. Atualmente, as linguagens assembly mais comuns são: 8086汇编, Win32汇编, Win64汇编, ARM汇编(嵌入式、Mac、iOS ).iPhone usa ARMassembly, mas dispositivos diferentes têm diferenças porque suas arquiteturas de CPU são diferentes.
armv6: iPhone, iPhone2, iPhone3G, 1ª e 2ª geração iPod Touch
armv7: iPhone3GS, iPhone4, iPhone4S,iPad, iPad2, iPad3(O novo iPad), iPad mini, iPod Touch 3G, iPod Touch4
armv7s: iPhone5, iPhone5C, iPad4( iPad com Retina Display)
arm64: iPhone5S e posterior iPhoneX, iPad Air, iPad mini2 e posterior O Assembler gerará instruções diferentes, que CPU架构corresponderão a diferentes conjuntos de instruções. Como o aplicativo é executado no telefone ou no computador?   Através da figura acima, podemos entender basicamente o processo de execução do programa. Relacionado ao hardware é a coisa mais importante CPU. A maioria das instruções em assembly está associada CPUa e 内存. Geralmente o que dizemos 32位e64位Sistema, a diferença está na diferença na taxa de transferência de dados, que está relacionada ao barramento de dados. O princípio de funcionamento da CPU é descarregar externamente. A CPU do sistema de 32 bits descarrega o bit de throughput de cada vez 4字节, e a CPU do sistema de 64 bits descarrega o bit de throughput de cada vez 8字节. Então o que são dados 总线?   总线é uma coleção de fios. Cada chip da CPU possui muitos 管脚, e estes são 管脚conectados ao barramento, e a CPU interage com dispositivos externos através do barramento. O ônibus é dividido em três categorias: 地址总线, 数据总线, 控制总线.   地址总线Existem várias linhas que determinam o ônibus, 宽度e é 宽度decidido 寻址的能力. Durante a execução do programa, geralmente nos referimos a um arquivo de imagem de substantivo (image()). Na verdade, é uma representação de arquivos executáveis ​​carregados do disco para a memória. 8086A largura do barramento de endereço é 20, portanto, a capacidade de endereçamento é 1M. 8080A largura do barramento de endereço é 16, portanto, a capacidade de endereçamento é 64K. Bem, vamos explorar a compilação desta edição primeiro, e continuaremos a estudá-la na próxima edição.

おすすめ

転載: juejin.im/post/6989625653599404040