╔══════════════════════════════════════════════╗
║ DEVKIT ║
║ Developer & Security Toolkit ║
╚══════════════════════════════════════════════╝
Um canivete suíço de terminal para desenvolvedores, DevOps e profissionais de segurança — escrito inteiramente em Assembly x86-64 puro, sem libc, sem linkagem dinâmica, sem dependências. Só syscalls Linux, direto ao ponto.
- O que é o DEVKIT
- Filosofia do projeto
- Instalação e build
- Uso básico
- Flags globais
- Referência completa de comandos
- Códigos de saída
- Cores e detecção de terminal
- Arquitetura interna
- Limitações conhecidas (por design)
- Segurança
- Estrutura do projeto
- Licença
O DEVKIT concentra em um único binário estático um conjunto de comandos pequenos, rápidos e extremamente úteis para o dia a dia de quem trabalha com tecnologia: informações de sistema, inspeção de arquivos, diagnóstico de rede, detecção de ferramentas e projetos, utilidades de Git, calculadora, geração de UUID/números aleatórios e um painel de diagnóstico completo do ambiente.
Tudo isso sem um único #include, sem libc, sem processos filhos desnecessários. Cada
comando lê diretamente de /proc, /sys, faz stat/ioctl/socket ou parseia arquivos como
/proc/net/tcp e .git/HEAD manualmente — a mesma informação que ferramentas como uname,
free, ip, stat e git mostram, só que obtida diretamente pela via mais curta possível: a
syscall.
$ devkit info SYSTEM ──────────────────────────────── OS Linux Kernel 6.18.33.2-microsoft-standard-WSL2 Arch x86_64 Hostname DESKTOP-U9GDQN4 User henry CPU Cores 4 RAM 7 GB Uptime 0d 0h
| Princípio | O que significa na prática |
|---|---|
| Um arquivo | Todo o código-fonte vive em devkit.asm. Nada de src/, lib/, múltiplos .asm. |
| Assembly real | Sem C escondido, sem wrappers. nasm -f elf64 compila o arquivo direto para objeto ELF64, ld linka. |
| Zero dependências | Nenhuma biblioteca externa, nenhuma libc. Cada comando fala diretamente com o kernel via syscall. |
| Somente leitura | O DEVKIT nunca apaga, nunca modifica configuração, nunca mata processo, nunca altera o Git, nunca instala nada. É 100% diagnóstico e inventário local. |
| Honestidade com os dados | Nenhum valor é inventado. Quando uma informação não tem uma fonte local confiável (como estado de firewall), o DEVKIT diz isso explicitamente em vez de forjar um resultado. |
| stdout = dado, stderr = erro | Toda saída útil vai para stdout; todo erro vai para stderr com prefixo [ERROR] — essencial para scripts e automação. |
| Rápido de verdade | Sem runtime, sem garbage collector, sem VM. O binário sobe e termina em microssegundos. |
- NASM ≥ 2.x (testado com
3.01) - GNU ld (binutils, testado com
2.46) - Linux x86-64 (desenvolvido e testado sob WSL2 Ubuntu, funciona em qualquer distro moderna)
git clone https://github.com/excanear/devkit.git
cd devkit
makeO Makefile oferece os seguintes alvos:
| Comando | O que faz |
|---|---|
make |
Build padrão — gera ./devkit |
make debug |
Rebuild com símbolos de debug DWARF (-g -F dwarf), útil para gdb |
make release |
Rebuild com otimização (-O2 no NASM) |
make install |
Instala o binário em $(PREFIX)/bin (padrão /usr/local/bin) |
make uninstall |
Remove o binário instalado |
make clean |
Remove devkit.o e devkit |
Build manual, sem make (equivalente ao que o Makefile faz por baixo):
nasm -f elf64 devkit.asm -o devkit.o ld devkit.o -o devkit
Depois de make install, o comando fica disponível globalmente:
devkit info
devkit <comando> [argumentos] [--flags]
Sem nenhum argumento, o DEVKIT mostra o banner com a lista completa de comandos agrupados por categoria:
$ devkit ╔══════════════════════════════════════════════╗ ║ DEVKIT ║ ║ Developer & Security Toolkit ║ ╚══════════════════════════════════════════════╝ Usage: devkit <command> SYSTEM info System overview cpu CPU information ram Memory information disk Disk information uptime System uptime FILES size File size type Detect file type hex Hex viewer strings Extract strings lines Count lines hash File hash perms File permissions NETWORK ip IP information interfaces Network interfaces gateway Default gateway ports Listening ports DEVELOPMENT tools Detect developer tools project Detect current project env Environment information path Show PATH GIT git Git repository overview branch Current branch status Repository status UTILS calc Calculator convert Number conversion timestamp Unix timestamp random Generate random value uuid Generate UUID DIAGNOSTICS quick Quick environment check doctor Environment diagnostic OPTIONS --help --version --json --minimal
Para ajuda detalhada de um comando específico, use devkit help <comando>:
$ devkit help strings DEVKIT STRINGS Usage: devkit strings <file> [--min N] Description: Extracts and prints runs of printable ASCII characters from a file. Options: --min N Minimum run length to print (default 4)
| Flag | Efeito |
|---|---|
--help / help (sem argumento) |
Mostra o banner completo com todos os comandos |
help <comando> |
Mostra o uso detalhado de um comando específico |
--version |
Mostra a versão do binário |
--json |
Emite saída em JSON válido, sem formatação decorativa — disponível em info, tools, project e quick |
--minimal |
Emite uma única linha condensada, ideal para prompts de shell e scripts — disponível em info |
--json e --minimal nunca contêm códigos de cor ANSI, mesmo que o terminal suporte cores
— são feitos para consumo por máquina, e nada de escape code deve vazar para dentro deles. Isso
é validado explicitamente (ver Cores e detecção de terminal).
$ devkit info --json
{"os":"Linux","kernel":"6.18.33.2-microsoft-standard-WSL2","arch":"x86_64","hostname":"DESKTOP-U9GDQN4","user":"henry","cpu_cores":4,"memory_total":8311635968}
$ devkit info --minimal
Linux x86_64 | CPU:4 | RAM:7GB | User:henry
$ devkit tools --json
{"git":true,"gcc":true,"clang":false,"python":false,"python3":true,"node":false,"npm":true,"go":true,"rustc":false,"cargo":false,"java":false,"docker":false,"make":true,"cmake":false,"nasm":true,"gdb":false}Informações do sistema operacional, lidas diretamente de /proc, uname() e statfs().
| Comando | Descrição | Fonte de dados |
|---|---|---|
devkit info |
Visão geral: SO, kernel, arquitetura, hostname, usuário, núcleos de CPU, RAM, uptime | /proc/cpuinfo, /proc/meminfo, /proc/uptime, uname(), /proc/sys/kernel/hostname |
devkit cpu |
Número de núcleos de CPU | /proc/cpuinfo |
devkit ram |
Memória total instalada | /proc/meminfo |
devkit disk |
Espaço total e livre em disco (/) |
statfs() |
devkit uptime |
Tempo desde o boot, em dias e horas | /proc/uptime |
$ devkit cpu CPU Cores 4 $ devkit ram RAM 7 GB $ devkit disk Disk 1006 GB total, 996 GB free $ devkit uptime Uptime 0d 0h
devkit info aceita --json e --minimal (ver Flags globais).
Ferramentas de inspeção de arquivo — sem depender da extensão, sem confiar em metadados que podem mentir.
| Comando | Descrição |
|---|---|
devkit size <arquivo> |
Tamanho em bytes, com conversão automática para KB/MB/GB |
devkit type <arquivo> |
Detecta o tipo real do arquivo pelos magic bytes (assinatura binária), não pela extensão |
devkit hex <arquivo> |
Hex dump: offset, 16 bytes em hexadecimal e gutter ASCII |
devkit strings <arquivo> [--min N] |
Extrai sequências de caracteres ASCII imprimíveis (padrão: mínimo 4 caracteres) |
devkit lines <arquivo> |
Conta linhas (ocorrências de \n) |
devkit hash <arquivo> |
Calcula o hash SHA-256 do arquivo (implementação própria, sem OpenSSL) |
devkit perms <arquivo> |
Mostra permissões rwx de owner/group/other e o valor octal |
$ devkit size devkit 77656 bytes (75 KB) $ devkit type devkit ELF executable $ devkit hex devkit | head -4 00000000 7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00 | .ELF............ 00000010 02 00 3E 00 01 00 00 00 00 10 40 00 00 00 00 00 | ..>.......@..... 00000020 40 00 00 00 00 00 00 00 98 2D 01 00 00 00 00 00 | @........-...... 00000030 00 00 00 00 40 00 38 00 03 00 40 00 07 00 06 00 | [email protected]...@..... $ devkit hash devkit SHA256: effd5dfefc1475d16014095c5bdf8908d970aaf67b3ca021ecb204e6fd3a0f8b $ devkit perms devkit rwxrwxrwx Octal 777 $ devkit lines devkit.asm Lines: 2921
Tipos de arquivo reconhecidos por assinatura binária: ELF, PNG, JPEG, GIF (87a/89a), PDF,
ZIP, GZIP, RAR, 7Z, SQLite, WAV, MP3, MP4. Qualquer outro conteúdo é reportado como
Unknown / Data — o DEVKIT nunca chuta um tipo que não conseguiu confirmar pelos bytes reais.
Diagnóstico de rede local via socket()/ioctl() e parsing de /proc/net/*. Somente
leitura, somente inventário — nada aqui faz scan, ataque ou qualquer operação ofensiva.
| Comando | Descrição |
|---|---|
devkit ip |
Endereços IPv4 das interfaces (exclui loopback) |
devkit interfaces |
Todas as interfaces com IP e estado (UP/DOWN) |
devkit gateway |
Gateway padrão da rota atual |
devkit ports |
Portas TCP locais em estado LISTEN |
$ devkit interfaces NETWORK INTERFACES lo 127.0.0.1 UP eth0 172.28.225.180 UP $ devkit gateway 172.28.224.1 $ devkit ports LISTENING PORTS 53 53
Detecção de ferramentas instaladas e reconhecimento do projeto no diretório atual — nunca assume nada, sempre verifica.
| Comando | Descrição |
|---|---|
devkit tools |
Verifica se 16 ferramentas de desenvolvimento estão disponíveis no PATH |
devkit project |
Detecta o tipo de projeto no diretório atual pelos arquivos característicos |
devkit env [--names] |
Mostra USER, HOME, SHELL, TERM, PWD, PATH |
devkit path |
Lista o conteúdo de PATH, um diretório por linha |
Ferramentas verificadas por devkit tools: git, gcc, clang, python, python3,
node, npm, go, rustc, cargo, java, docker, make, cmake, nasm, gdb.
$ devkit tools DEVELOPMENT TOOLS git ✓ gcc ✓ clang ✗ python ✗ python3 ✓ node ✗ npm ✓ go ✓ rustc ✗ cargo ✗ java ✗ docker ✗ make ✓ cmake ✗ nasm ✓ gdb ✗
Arquivos reconhecidos por devkit project: package.json (Node/npm), Cargo.toml
(Rust/cargo), go.mod (Go), pyproject.toml/requirements.txt (Python), Makefile/
CMakeLists.txt (C/C++), composer.json (PHP), pom.xml (Java/Maven).
$ devkit project Project C/C++ (Make) Language C/C++ Package Manager make Git Repository YES Files 10 Total Size 324222 bytes
devkit tools --jsonedevkit project --jsontambém estão disponíveis para uso em scripts.
Leitura direta de .git/HEAD e do diretório de trabalho — nenhum comando git é executado
como subprocesso, e o repositório nunca é modificado.
| Comando | Descrição |
|---|---|
devkit git |
Visão geral: existe repositório? Qual branch? |
devkit branch |
Apenas o nome da branch atual (ou hash em detached HEAD) |
devkit status |
Branch, estado (limpo/sujo) e contagem de arquivos modificados/não rastreados/deletados |
$ devkit branch main $ devkit status Repository YES Branch main Status DIRTY Modified 0 Untracked 7 Deleted 0
Fora de um repositório Git, devkit branch e devkit status retornam erro com código de
saída 5 (operação não suportada neste contexto); devkit git reporta Repository NO e
encerra normalmente com código 0.
Utilitários de uso geral — calculadora, conversão numérica, timestamp e geração de valores
aleatórios via CSPRNG do kernel (getrandom()).
| Comando | Descrição |
|---|---|
devkit calc "<expressão>" |
Avalia uma expressão aritmética: + - * / ( ) e menos unário |
devkit convert <número> |
Mostra o número em decimal, hexadecimal, binário e octal |
devkit timestamp |
Timestamp Unix atual (segundos desde a epoch) |
devkit random |
Número aleatório de 64 bits, gerado pelo CSPRNG do kernel |
devkit uuid |
UUID v4 válido (RFC 4122), com bits de versão/variante corretos |
$ devkit calc "(2+3)*4" 20 $ devkit calc "10/0" [ERROR] Division by zero # código de saída 1 $ devkit convert 255 DEC 255 HEX FF BIN 11111111 OCT 377 $ devkit timestamp 1787941981 $ devkit random 14289423577810694248 $ devkit uuid 30025a30-ba28-4244-a7a2-71d793d8d425
A calculadora usa um parser recursivo-descendente completo (precedência de operadores, parênteses aninhados, menos unário) e trata divisão/módulo por zero como erro controlado — nunca deixa o processo travar.
Painéis de diagnóstico que agregam informação de várias fontes ao mesmo tempo.
| Comando | Descrição |
|---|---|
devkit quick |
Resumo condensado com ✓/✗ por seção (sistema, rede, ferramentas, projeto, segurança) |
devkit doctor |
Diagnóstico completo linha a linha, terminando em contadores de erros/avisos/saudável |
$ devkit quick
DEVKIT QUICK CHECK
──────────────────
SYSTEM
✓ Linux x86_64
✓ CPU Cores: 4
✓ RAM: 7 GB
NETWORK
✓ Interface: eth0 (172.28.225.180)
✓ Gateway: 172.28.224.1
DEVELOPMENT
✓ git
✓ gcc
✗ python
✗ node
✗ docker
PROJECT
✓ Git repository (branch: main)
Working tree: DIRTY
SECURITY
Listening ports: 2
Firewall status unknown (no reliable local signal)
STATUS: READY$ devkit doctor ✓ Linux x86_64 detected ✓ CPU cores: 4 ✓ RAM: 7 GB ✓ Active network interface: eth0 (172.28.225.180) ✓ Default gateway: 172.28.224.1 ✓ git found in PATH ✓ gcc found in PATH ⚠ python not found in PATH ⚠ node not found in PATH ⚠ docker not found in PATH ✓ Git repository detected (branch: main) ⚠ Working tree has uncommitted changes ✓ Listening ports: 2 - Firewall status unknown (no reliable local signal) ERRORS: 0 WARNINGS: 4 HEALTHY: 9
devkit doctor só diagnostica — ele nunca corrige nada automaticamente. devkit quick
também aceita --json para consumo por scripts de CI/automação.
Roda, em sequência, todos os comandos que não exigem argumento (21 no total — todo o SYSTEM, NETWORK, DEVELOPMENT, GIT, UTILS e DIAGNOSTICS), com um cabeçalho antes de cada seção. Ideal para um snapshot completo do ambiente em um único comando:
$ devkit all === INFO === SYSTEM ──────────────────────────────── OS Linux Kernel 6.18.33.2-microsoft-standard-WSL2 Arch x86_64 Hostname DESKTOP-U9GDQN4 User henry CPU Cores 4 RAM 7 GB Uptime 0d 0h === CPU === CPU Cores 4 === RAM === ...
Fora de um repositório Git, as seções BRANCH e STATUS mostram Not a git repository (skipped) em vez de interromper a execução — o all sempre roda até o final, mesmo quando uma
seção individual não tem o que reportar.
Comandos que exigem um argumento explícito (size, type, hex, strings, hash, perms,
calc, convert) não fazem parte do all, já que não existe um valor padrão sensato para
rodá-los sozinhos.
O DEVKIT segue uma tabela de códigos de saída consistente em todos os comandos — essencial para automação e scripts:
| Código | Significado | Exemplo |
|---|---|---|
0 |
Sucesso | Qualquer comando executado com êxito |
1 |
Erro em tempo de execução na própria operação | devkit calc "10/0" (divisão por zero) |
2 |
Erro de uso — argumento ausente/inválido, comando desconhecido, erro de sintaxe | devkit calc "1+", devkit frobnicate |
3 |
Arquivo não encontrado ou ilegível | devkit size /nao-existe |
4 |
Permissão negada | devkit hex arquivo-sem-permissao |
5 |
Operação não suportada neste contexto | devkit branch fora de um repositório Git |
Toda mensagem de erro é escrita em stderr com o prefixo [ERROR]; a saída normal sempre vai
para stdout. Isso permite compor o DEVKIT livremente em pipelines:
devkit info --json | jq .cpu_cores devkit hash arquivo.bin 2>/dev/null | tail -1 devkit size arquivo || echo "arquivo não encontrado"
O DEVKIT detecta automaticamente se a saída está indo para um terminal real (via ioctl(TCGETS)
no stdout) e só emite códigos de cor ANSI quando isso é verdade:
- Em um terminal interativo: cabeçalhos aparecem em negrito/ciano, sucessos (
✓) em verde, falhas (✗) em vermelho, avisos (⚠) em amarelo, e mensagens[ERROR]em vermelho. - Em um pipe ou redirecionamento (
devkit doctor > log.txt,devkit quick | grep ✓): as cores são automaticamente desativadas, sem nenhum código de escape sujando a saída. --jsone--minimalnunca têm cor, sob nenhuma circunstância — mesmo que você force um terminal colorido, essas saídas são garantidamente texto puro, prontas parajq,python3 -m json.toolou qualquer parser.
O DEVKIT é organizado em um único arquivo (devkit.asm), mas internamente segue uma separação
clara por seções comentadas — a mesma organização usada por qualquer projeto multi-arquivo, só
que dentro de um arquivo só:
CLI → parsing de argv, dispatch de comandos, --help/--version
COLORS → detecção de TTY e helpers de impressão colorida
SYSTEM → info, cpu, ram, disk, uptime
FILES → size, type, hex, strings, lines, hash, perms
NETWORK → ip, interfaces, gateway, ports
DEVELOPMENT → tools, project, env, path
GIT → git, branch, status
UTILITIES → calc, convert, timestamp, random, uuid
DIAGNOSTICS → quick, doctor, all
OUTPUT → print_string, print_number, print_hex, print_label...
STRING UTILS → strlen, strcmp, strncmp, memcpy, memcmp
FILE UTILS → open_file, read_file, close_file, stat_file
EXIT → exit_success, exit_error, die_usage, die_file, die_perm
Nenhuma dependência externa. Toda a interação com o sistema operacional acontece via
instrução syscall direta — sem libc, sem crt0, sem link dinâmico. As mesmas informações
que você veria com uname, free -h, ip addr, ss -tln, stat, sha256sum ou git status
são obtidas lendo diretamente /proc, /sys, chamando stat()/socket()/ioctl() ou
parseando o formato binário do .git — nunca invocando esses binários como subprocesso.
Disciplina de registradores documentada. Cada rotina do arquivo documenta explicitamente
quais registradores ela modifica ("clobbers") logo acima da sua definição — uma convenção
essencial em Assembly puro, onde não existe um compilador para avisar sobre um valor sendo
sobrescrito sem querer. Por exemplo, todas as rotinas de impressão (print_string,
print_error, print_number, print_hex, print_label) modificam
rax, rdi, rsi, rdx, rcx, r8, r11; as rotinas de string (strlen, strcmp, strncmp,
memcpy, memcmp) modificam apenas rax, rcx, r8, r9. Qualquer chamador que precise preservar
um valor através dessas chamadas usa a pilha ou um registrador callee-saved (rbx, r12–r15).
devkit toolsmostra presença, não versão. O comando verifica se cada ferramenta existe noPATH(✓/✗), mas não imprime números de versão — isso exigiriafork/execde cada binário e parsing da sua saída, uma dependência frágil e não-determinística que foi deliberadamente evitada em uma ferramenta que só usa syscalls diretas.- Sem sinal real de firewall.
devkit quickedevkit doctormostram"Firewall status unknown (no reliable local signal)"em vez de um resultado de firewall, porque não existe uma fonte local, confiável e sem dependências para esse dado no Linux puro. Seguindo a regra de nunca inventar dados, o DEVKIT prefere dizer "não sei" a chutar uma resposta. devkit statusconta apenas arquivos não rastreados de forma completa. Contagem de arquivos modificados/deletados usa uma heurística simplificada (sem parsing binário completo do índice do Git) — suficiente para um panorama rápido, mas não substituigit statuscompleto para decisões críticas.
O DEVKIT foi desenhado para ser seguro por padrão:
- ✅ Local — nunca faz chamadas de rede, nunca envia telemetria
- ✅ Somente leitura — nunca apaga, modifica ou instala nada
- ✅ Nunca altera configuração de firewall, Git, permissões ou processos
- ✅ Funcionalidades de rede são estritamente diagnóstico/inventário — nenhum scan, nenhuma operação ofensiva
devkit/
├── devkit.asm # todo o código-fonte — um único arquivo NASM
├── Makefile # build, install, uninstall, clean
├── README.md # este arquivo
└── LICENSE # MIT
Distribuído sob a licença MIT. Veja LICENSE para o texto completo.
DEVKIT — Um Binário. Um Comando. Muito Menos Trabalho.