r2 /bin/ls
aaa # analiza el binario
afl # Lista las funciones
s main # selecciona una función
# decompila
pdf # asm
pdd # r2ai
pdg # ghidra

Ejemplo:

// gcc bucle.c -o bucle
#include <stdio.h>

int main(){
        for (int i = 0; i < 100; i++) printf("i: %d\n",i);
        return 0;
}

Analizamos el binario con radare:

r2 bucle
aaa
afl 
s main
pdf

Este es el código ASM generado por radare:

            ; DATA XREF from entry0 @ 0x1058(r)
 59: int main (int argc, char **argv, char **envp);
 afv: vars(1:sp[0xc..0xc])
           0x00001139      55             push rbp  ; Inicializa la pila
           0x0000113a      4889e5         mov rbp, rsp ; Carga rsp a la base de la pila (rbp).
           0x0000113d      4883ec10       sub rsp, 0x10 ; 0x10 = 16 en hexadecimal. Crea 16 bits de espacio para las variables.
           0x00001141      c745fc0000..   mov dword [var_4h], 0 ; Mueve 0 a var_4h
       ┌─< 0x00001148      eb1d           jmp 0x1167 ; Salta a la dirección 0x1167
          ; CODE XREF from main @ 0x116b(x)
      ┌──> 0x0000114a      8b45fc         mov eax, dword [var_4h] ; Mueve el contenido de var_4h a eax
      ■│   0x0000114d      89c6           mov esi, eax ; Mueve el eax a esi
      ■│   0x0000114f      488d05ae0e..   lea rax, str.i:__d_n        ; 0x2004 ; "i: %d\n" ; Mueve la string a rax
      ■│   0x00001156      4889c7         mov rdi, rax                ; const char *format - carga el rax a rdi
      ■│   0x00001159      b800000000     mov eax, 0 ; carga 0 al eax
      ■│   0x0000115e      e8cdfeffff     call sym.imp.printf         ; int printf(const char *format) - llama a printf
      ■│   0x00001163      8345fc01       add dword [var_4h], 1 ; suma 1 al contenido de var_4h
      ■│   ; CODE XREF from main @ 0x1148(x)
      ■└─> 0x00001167      837dfc63       cmp dword [var_4h], 0x63    ; 'c' - Compara contenido 0x63 = 99 en hexadecimal con el contenido de var_4h que es inicializado en 0.
      └──< 0x0000116b      7edd           jle 0x114a ; Salta si el contenido de var_4h es menor a 99.
           0x0000116d      b800000000     mov eax, 0 # Mueve el 0 al eax.
           0x00001172      c9             leave
           0x00001173      c3             ret

Otro código en C:

#include <stdio.h>

int main(){
        int datos[5];
        int suma = 0;

        for (int contador = 0; contador < 5; contador++){
                printf("Ingrese el dato número: %d\n",contador+1);
                scanf("%d",&datos[contador]);
                suma += datos[contador];
        }

        printf("La suma es %d\n",suma);
        printf("Su media es %4.2f\n", (float)suma/5);

        return 0;
}

Esto es lo que nos decompila radare en asm:

            ; DATA XREF from entry0 @ 0x1078(r)                                                                                                           08:43:14 [18/37]┌ 240: int main (int argc, char **argv, char **envp);
 afv: vars(4:sp[0x10..0x30])
           0x00001159      55             push rbp
           0x0000115a      4889e5         mov rbp, rsp
           0x0000115d      4883ec30       sub rsp, 0x30
           0x00001161      64488b0425..   mov rax, qword fs:[0x28]
           0x0000116a      488945f8       mov qword [canary], rax
           0x0000116e      31c0           xor eax, eax
           0x00001170      c745d80000..   mov dword [var_28h], 0
           0x00001177      c745dc0000..   mov dword [var_24h], 0
       ┌─< 0x0000117e      eb54           jmp 0x11d4
          ; CODE XREF from main @ 0x11d8(x)
      ┌──> 0x00001180      8b45dc         mov eax, dword [var_24h]
      ?│   0x00001183      83c001         add eax, 1
      ?│   0x00001186      89c6           mov esi, eax
      ?│   0x00001188      488d05750e..   lea rax, str.Ingrese_el_dato_nmero:__d_n ; 0x2004 ; "Ingrese el dato n\u00famero: %d\n"
      ?│   0x0000118f      4889c7         mov rdi, rax                ; const char *format
      ?│   0x00001192      b800000000     mov eax, 0
      ?│   0x00001197      e8a4feffff     call sym.imp.printf         ; int printf(const char *format)
      ?│   0x0000119c      488d45e0       lea rax, [var_20h]
      ?│   0x000011a0      8b55dc         mov edx, dword [var_24h]
      ?│   0x000011a3      4863d2         movsxd rdx, edx
      ?│   0x000011a6      48c1e202       shl rdx, 2
      ?│   0x000011aa      4801d0         add rax, rdx
      ?│   0x000011ad      4889c6         mov rsi, rax
      ?│   0x000011b0      488d056a0e..   lea rax, [0x00002021]       ; "%d"
      ?│   0x000011b7      4889c7         mov rdi, rax                ; const char *format
      ?│   0x000011ba      b800000000     mov eax, 0
      ?│   0x000011bf      e88cfeffff     call sym.imp.__isoc99_scanf ; int scanf(const char *format)
      ?│   0x000011c4      8b45dc         mov eax, dword [var_24h]
      ?│   0x000011c7      4898           cdqe
      ?│   0x000011c9      8b4485e0       mov eax, dword [rbp + rax*4 - 0x20]
      ?│   0x000011cd      0145d8         add dword [var_28h], eax
      ?│   0x000011d0      8345dc01       add dword [var_24h], 1
      ?│   ; CODE XREF from main @ 0x117e(x)
      ?└─> 0x000011d4      837ddc04       cmp dword [var_24h], 4
      └──< 0x000011d8      7ea6           jle 0x1180
           0x000011da      8b45d8         mov eax, dword [var_28h]
           0x000011dd      89c6           mov esi, eax
           0x000011df      488d053e0e..   lea rax, str.La_suma_es__d_n ; 0x2024 ; "La suma es %d\n"
           0x000011e6      4889c7         mov rdi, rax                ; const char *format
           0x000011e9      b800000000     mov eax, 0
           0x000011ee      e84dfeffff     call sym.imp.printf         ; int printf(const char *format)
           0x000011f3      660fefc0       pxor xmm0, xmm0
           0x000011f7      f30f2a45d8     cvtsi2ss xmm0, dword [var_28h]
           0x000011fc      f30f100d44..   movss xmm1, dword [0x00002048] ; [0x2048:4]=0x40a00000
           0x00001204      f30f5ec1       divss xmm0, xmm1
           0x00001208      660fefd2       pxor xmm2, xmm2
           0x0000120c      f30f5ad0       cvtss2sd xmm2, xmm0
           0x00001210      66480f7ed0     movq rax, xmm2
           0x00001215      66480f6ec0     movq xmm0, rax
           0x0000121a      488d05120e..   lea rax, str.Su_media_es__4.2f_n ; 0x2033 ; "Su media es %4.2f\n"
           0x00001221      4889c7         mov rdi, rax                ; const char *format
           0x00001224      b801000000     mov eax, 1
           0x00001229      e812feffff     call sym.imp.printf         ; int printf(const char *format)
           0x0000122e      b800000000     mov eax, 0
           0x00001233      488b55f8       mov rdx, qword [canary]
           0x00001237      64482b1425..   sub rdx, qword fs:[0x28]
       ┌─< 0x00001240      7405           je 0x1247
          0x00001242      e8e9fdffff     call sym.imp.__stack_chk_fail ; void __stack_chk_fail(void)
          ; CODE XREF from main @ 0x1240(x)
       └─> 0x00001247      c9             leave
           0x00001248      c3             ret

Listar variables: afv.

[0x00001159]> afv
var int64_t canary @ rbp-0x8
var int64_t var_20h @ rbp-0x20
var signed int64_t var_24h @ rbp-0x24
var int64_t var_28h @ rbp-0x28
[0x00001159]>

Renombrar variables:

afvn contador var_20h