Pular para o conteúdo
Skillpedia
Segurança48 mil · #2418

binary-analysis-patterns

Ensina seu agente a analisar programas compilados. Ele aprende a entender código assembly e a reconstruir a lógica de programas complexos.

O que ela faz

Esta ferramenta ajuda a entender como programas de computador funcionam em um nível muito baixo, mostrando exemplos de código que explicam como as instruções são organizadas e como o computador executa tarefas.

Quando usar

  • ✓Quando você quer entender como um programa é construído.
  • ✓Ao aprender sobre a linguagem de máquina dos computadores.
  • ✓Para ver exemplos de como o computador toma decisões ou repete tarefas.

Exemplo do que pedir para a IA

“Mostre-me como um programa guarda informações em uma lista.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/binary-analysis-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/binary-analysis-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ela fornece exemplos de código em linguagem de máquina (assembly) que representam operações comuns, como iniciar ou terminar uma função, fazer cálculos ou repetir ações.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add sickn33/agentic-awesome-skills --skill binary-analysis-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/binary-analysis-patterns/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões de Análise Binária

Padrões e técnicas abrangentes para analisar binários compilados, entender código assembly e reconstruir a lógica do programa.

Use esta habilidade quando

  • Trabalhando em tarefas ou fluxos de trabalho de padrões de análise binária
  • Precisando de orientação, melhores práticas ou listas de verificação para padrões de análise binária

Não use esta habilidade quando

  • A tarefa não estiver relacionada a padrões de análise binária
  • Você precisar de um domínio ou ferramenta diferente fora deste escopo

Instruções

  • Clarifique objetivos, restrições e entradas necessárias.
  • Aplique as melhores práticas relevantes e valide os resultados.
  • Forneça etapas acionáveis e verificação.

Fundamentos de Desmontagem

Padrões de Instrução x86-64

Prólogo/Epílogo de Função

; Standard prologue
push rbp           ; Save base pointer
mov rbp, rsp       ; Set up stack frame
sub rsp, 0x20      ; Allocate local variables

; Leaf function (no calls)
; May skip frame pointer setup
sub rsp, 0x18      ; Just allocate locals

; Standard epilogue
mov rsp, rbp       ; Restore stack pointer
pop rbp            ; Restore base pointer
ret

; Leave instruction (equivalent)
leave              ; mov rsp, rbp; pop rbp
ret

Convenções de Chamada

System V AMD64 (Linux, macOS)

; Arguments: RDI, RSI, RDX, RCX, R8, R9, then stack
; Return: RAX (and RDX for 128-bit)
; Caller-saved: RAX, RCX, RDX, RSI, RDI, R8-R11
; Callee-saved: RBX, RBP, R12-R15

; Example: func(a, b, c, d, e, f, g)
mov rdi, [a]       ; 1st arg
mov rsi, [b]       ; 2nd arg
mov rdx, [c]       ; 3rd arg
mov rcx, [d]       ; 4th arg
mov r8, [e]        ; 5th arg
mov r9, [f]        ; 6th arg
push [g]           ; 7th arg on stack
call func

Microsoft x64 (Windows)

; Arguments: RCX, RDX, R8, R9, then stack
; Shadow space: 32 bytes reserved on stack
; Return: RAX

; Example: func(a, b, c, d, e)
sub rsp, 0x28      ; Shadow space + alignment
mov rcx, [a]       ; 1st arg
mov rdx, [b]       ; 2nd arg
mov r8, [c]        ; 3rd arg
mov r9, [d]        ; 4th arg
mov [rsp+0x20], [e] ; 5th arg on stack
call func
add rsp, 0x28

Padrões de Assembly ARM

Convenção de Chamada ARM64 (AArch64)

; Arguments: X0-X7
; Return: X0 (and X1 for 128-bit)
; Frame pointer: X29
; Link register: X30

; Function prologue
stp x29, x30, [sp, #-16]!  ; Save FP and LR
mov x29, sp                 ; Set frame pointer

; Function epilogue
ldp x29, x30, [sp], #16    ; Restore FP and LR
ret

Convenção de Chamada ARM32

; Arguments: R0-R3, then stack
; Return: R0 (and R1 for 64-bit)
; Link register: LR (R14)

; Function prologue
push {fp, lr}
add fp, sp, #4

; Function epilogue
pop {fp, pc}    ; Return by popping PC

Padrões de Fluxo de Controle

Ramificações Condicionais

; if (a == b)
cmp eax, ebx
jne skip_block
; ... if body ...
skip_block:

; if (a < b) - signed
cmp eax, ebx
jge skip_block    ; Jump if greater or equal
; ... if body ...
skip_block:

; if (a < b) - unsigned
cmp eax, ebx
jae skip_block    ; Jump if above or equal
; ... if body ...
skip_block:

Padrões de Loop

; for (int i = 0; i < n; i++)
xor ecx, ecx           ; i = 0
loop_start:
cmp ecx, [n]           ; i < n
jge loop_end
; ... loop body ...
inc ecx                ; i++
jmp loop_start
loop_end:

; while (condition)
jmp loop_check
loop_body:
; ... body ...
loop_check:
cmp eax, ebx
jl loop_body

; do-while
loop_body:
; ... body ...
cmp eax, ebx
jl loop_body

Padrões de Declaração Switch

; Jump table pattern
mov eax, [switch_var]
cmp eax, max_case
ja default_case
jmp [jump_table + eax*8]

; Sequential comparison (small switch)
cmp eax, 1
je case_1
cmp eax, 2
je case_2
cmp eax, 3
je case_3
jmp default_case

Padrões de Estrutura de Dados

Acesso a Array

; array[i] - 4-byte elements
mov eax, [rbx + rcx*4]        ; rbx=base, rcx=index

; array[i] - 8-byte elements
mov rax, [rbx + rcx*8]

; Multi-dimensional array[i][j]
; arr[i][j] = base + (i * cols + j) * element_size
imul eax, [cols]
add eax, [j]
mov edx, [rbx + rax*4]

Acesso a Estrutura

struct Example {
    int a;      // offset 0
    char b;     // offset 4
    // padding  // offset 5-7
    long c;     // offset 8
    short d;    // offset 16
};
; Accessing struct fields
mov rdi, [struct_ptr]
mov eax, [rdi]         ; s->a (offset 0)
movzx eax, byte [rdi+4] ; s->b (offset 4)
mov rax, [rdi+8]       ; s->c (offset 8)
movzx eax, word [rdi+16] ; s->d (offset 16)

Travessia de Lista Ligada

; while (node != NULL)

…
Perguntas frequentes

O que é 'assembly'?

É uma linguagem de programação de baixo nível que se parece muito com as instruções que o processador do computador entende diretamente.

Por que ver esses exemplos de código?

Ajuda a entender a lógica interna dos programas e como eles são executados pelo hardware.

Preciso saber programar para usar isso?

Não é preciso ser um programador experiente. A ferramenta é feita para mostrar os conceitos de forma clara, mesmo para quem está começando.

Detalhes

Descrição original do autor

Comprehensive patterns and techniques for analyzing compiled binaries, understanding assembly code, and reconstructing program logic.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#2418
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas