Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Trocando valores Assembly

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

  • Font Size
    #1

    Trocando valores Assembly

    Buenas!

    Hoje vou dar uma dica sobre como trocar valores entre registradores.

    Geralmente quando precisamos trocar valores entre registradores usamos um temporario,EX:

    Quero trocar os valores entre EAX e EBX:

    movl %eax, %ecx
    movl %ebx, %eax
    movl %ecx, %ebx

    Aqui o ECX foi usado para "intermediar" a troca dos valores.

    Isso pode ser muito chato e confuso,felizmente existe uma formar de fazer isso sem um terceiro registrador, o XCHG(Exchange).
    Vamos la:

    #forum.guiadohacker.com.br
    .section .text
    .globl _start
    _start:
    nop
    movl $100, %ecx
    movl $25, %edx
    xchg %ecx, %edx
    movl $1, %eax
    movl $0, %ebx
    int $0x80


    salve o arquivo como nome-do-arquivo.s . Depois utilize o Assembler(AS) do linux.

    as -gstabs -o nomedoarquivo.o nomedoarquivo.s

    O -GSTABS adiciona informações para auxiliar o debugger a percorrer o programa.

    Depois link o object file com o linker:

    ld -o nomedoarquivo nomedoarquivo.o

    Esse "programa" não vai fazer nada que seja visível porem vamos utilizar o debugger para ver oque acontece:

    gdb -q nomedoarquivo

    O -q (quiet) vai ocultar algumas informações pouco relevantes.

    Vamos setar um breakpoint no programa para acompanhar o que vai acontecer durante a execução:

    break *_start+1

    Aqui o breakpoint vai ser "setado" uma linha depois do label _start da section .text.
    Digite "run" para iniciar o programa e "next" para percorrer o mesmo.

    Repare que no começo ECX = 100 e EDX = 25, para confirmar isso pode digitar "print/d $ECX" onde /d indica um valor decimal(pode ser trocado para /x ou seja: hexadecimal)

    Continue com o "next" até a próxima linha após o XCHG e olhe os valores de ECX e EDX.
    Surpresa!Eles foram trocados sem usar um terceiro registrador.

    Lembrando que usei a sintaxe AT&T e não a INTEL.

    Similar Threads
X
Working...
X