Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Assembly invertendo bytes

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Assembly invertendo bytes

    Mazel Tov!

    Hoje vou mostrar como inverter os bits dos valores em assembly:

    Vamos ao codigo:

    #forum.guiadohacker.com.br
    .section .text
    .globl _start
    _start:
    nop
    movl $0x12345678, %ebx
    bswap %ebx
    movl $1, %eax
    int $0x80



    Salve como algo.s ou algo.asm
    Vamos usar o assembler:

    as -gstabs -o algo.o algo.s


    Vamos linkar:

    ld -o algo algo.o


    Mais uma vez esse programa nao faz nada, mas vamos usar nosso debugger
    para analisar melhor:

    gdb -q algo

    Vamos setar um breakpoint para ele parar a execução:

    break *_start

    Execute-o com o "run" e aperte "s" ou "next" para percorrer o programa:
    Analisando o valor de EBX antes do BSWAP:

    print/x $ebx

    Nos retorna seu valor: 0x12345678

    Depois do BSWAP o registrador EBX tem seu valor alterado:

    EBX = 0x78563412

    E isso que o BSWAP faz: inverte os bytes.

    Vou ressaltar que ele não muda os bits em si e sim os bytes, exemplo:

    EBX = 0x12345678
    BSWAP EBX

    ERRADO --> EBX = 0x87654321
    CORRETO->> EBX = 0X78563412


    Pense que como são numeros em hexa cada caractere equivale a 4bits.
    E como o BSWAP Inverte os BYTES e não os bits o valor apresentado esta certo.

    Mas para que isso afinal?

    Well... Isso vai produzir um valor big-endian de um valor little-endian, isso
    eh util quando vamos trabalhar em computadores e sistemas diferentes.

    Para esclarecer um pouco oque é big e little endian vou citar um exemplo:
    Temos o valor 0x04030201

    Big-Endian: Armazena o byte mais significativo(maior) antes:


    04 | 03 | 02 | 01
    X | X+1 | X+2 | X+3

    Sendo X um local de memoria, percebe-se que 04(maior valor) foi armazenado no
    menor endereco.

    Little-Endian:
    Valor: 0x04030201


    01 | 02 | 03 |04
    X | X+1 | X+2 |X+3


    O LE armazena o byte menos significante no menor endereco.


    Para melhor entendimento, troque os valores a serem armazenados e rode no GDB.
    Att. p0w3ll

    Similar Threads
X
Working...
X